ارسال پارامتر با retrofit

پرسیده شده
فعالیت 999 روز پیش
دیده شده 399 بار
0

با سلام و روز بخیر

در یک Api برای ارسال نام کاربری و پسورد از header یا body که در فیلم های فروشگاه جامع استاد تدریس نمودند استفاده نشده بلکه در postman در بخش params قرار میگیرد. 

آدرس api بدین گونه است

http://localhost:54320/UserAccount/Login?userID=2&password=2

به کمک retrofit میخواهیم این پارامترها را ارسال کنیم. (با Volley پارمترها ارسال و پاسخ دریافت میشود)

آیا این روش صحیح است؟

public interface RetrofitApiService {
    @FormUrlEncoded
    @POST("UserAccount/Login")
    Call<RootUser> getUser(@Field("userID") String userID, @Field("password") String password);
}

و فراخوانی بدین صورت

retrofitApiService.getUser(userName,password).enqueue(new Callback<RootUser>() {
            @Override
            public void onResponse(Call<RootUser> call, Response<RootUser> response) {
                Log.i(TAG, "onResponse: getuser");
                callback.OnSuccess(response.body());
            }

            @Override
            public void onFailure(Call<RootUser> call, Throwable t) {
                Log.i(TAG, "onErorr: getuser" + new Exception(t).toString());
                callback.OnError(new Exception(t));
            }
        });

که username و password را از طریق EditText از کاربر دریافت میکنیم.

 

آیا این روش صحیح هست.

 

در پروژه با خطای ذیل مواجه شدم

onErorr: getuserjava.lang.Exception: java.lang.RuntimeException: Failed to invoke public ir.kargar.kararmad2.Model.RootUser() with no args

بیاد ببینم مشکل از این بخش ارسال پارامتر است یا از بخش تبدیل اتوماتیک respone به کلاس RootUser.

 

با توجه به اینکه تمام آموزش های بعدی استاد مثل liveData و غیره بر اساس retrofit است باید کار را از volley به retrofit  تغییر دهم’’

 

سپاسگزارم

 

 

فایل پیوست

0
حذف شده

سلام وقت بخیر

برای ارسال query parameters با استفاده از retrofit به جای استفاده از @Field از @Query استفاده کنید

فایل پیوست

میلاد عزیززاده گلنگشی

توسط

میلاد عزیززاده گلنگشی

18 مرداد 00

حذف شده
متشکر. دستور العمل شما اجرا شد. @FormUrlEncoded را حذف کردم چون برنامه خود به خود بسته میشد . با trace کردن برنامه به کنم Debug متوجه Exeption شدم. باز همین خطای arg 0 نمایش میده. پس الان اگر اشکال از ارسال پارامتر نباشه باید از تبدیل اتوماتیک json به کلاس باشه به نظر شما اگر برای کال کردن retrofit نام کلاس را نخواهیم بدیم. یعنی response به صورت اتوماتیک به کمک GsonFActory تبدیل به کلاس مورد نظر نشه چه باید انجام بدیم؟ یعنی دستی responseرا بگیریم و به کلاس مورد نظر تبیدل کنیم. چه باید کرد.
حذف شده
کلاس RootUser از نوع abstract هست؟ یک شات هم از اون کلاس بدین
حذف شده
سلام بله سوال را به صورت کامل در این آدرس مشاهده بفرمایید. تاپیک کمک برای تبدیل NestedApi به کلاس جاوا در روش Retrofit https://7learn.ac/community/%DA%A9%D9%85%DA%A9-%D8%AA%D8%A8%D8%AF%DB%8C%D9%84-%D8%A7%D8%AA%D9%88%D9%85%D8%A7%D8%AA%DB%8C%DA%A9-nested-api-%D9%87%D8%A7-%D8%A8%D9%87-%DA%A9%D9%84%D8%A7%D8%B3-%D9%88-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%AF%D8%B1-retrofit-LMvc3 تنها تفاوتی که کرده، @Expise ها را حذف کردم. ارسال پارامتر هم به روشی که شما فرمودید انجام دادم. سپاس گذارم
حذف شده
مشاهده کردم کلاسی که retrofit قراره json رو به اون تبدیل کنه نباید abstract باشه من کلاستون رو مشاهده کردم هیچ چیزی درون این کلاس به صورت abstract نبود بنابراین کلاس RootUser میتونه abstract نباشه همچنین شما میتونید یک کلاس دیگه بسازین و این کلاس RootUser رو ارث بری کنید و به retrofit این کلاس جدید که abstract نیست رو بدین