رفتن به مطلب
انجمن اندروید ایران | آموزش برنامه نویسی اندروید و موبایل
  • android.png.1fab383bc8500cd93127cebc65b1dcab.png

فوری: مشکل در استفاده از کتابخانه Retrofit 2


پست های پیشنهاد شده

سلام به همگی

یه سوال از حرفه ای تر های انجمن دارم

تو برنامه ام نیاز به استفاده از تعدادی وب سرویس دارم و برای پیاده سازی اونها می خوام از کتابخونه Retrofit 2 استفاده کنم

همون طور که می دونید در زمان enqueue سرویس ساخته شده دو متد onResponse و onFailure ساخته میشن که متد onResponse زمانی اجرا میشه که داده های مورد نظرمون با موفقیت به سرور ارسال شده باشه و پاسخ متناظر با اون رو هم دریافت کرده باشیم و متد onFailure هم زمانی اجرا میشه که در زمان ارسال داده های مورد نظر به سرور مشکلی ایجاد شده باشه.

حال دستوراتی که من در متد onResponse و onFailure نوشتم بصورت زیره:

[shcode=java]myService.registerUser(signup).enqueue(new Callback() {

    @Override

    public void onResponse(Call call, Response response) {

        if (response.isSuccessful()) {

            alertShowMessage.setVisibility(View.VISIBLE);

            alertShowMessage.setMessageText(response.body().getMessage());

        } else {

            alertShowMessage.setVisibility(View.VISIBLE);

            alertShowMessage.setMessageText(response.body().getMessage());

        }

    }

    @Override

    public void onFailure(Call call, Throwable t) {

        alertShowMessage.setVisibility(View.VISIBLE);

        alertShowMessage.setMessageText(t.getMessage());

    }

});[/shcode]

و همین طور کد های مربوط به سرویس registerUser رو هم به صورت زیر تعریف کردم:

[shcode=java]public interface MyServiceAPI {

    String BASE_URL = "http://192.168.1.37/restful/";

    @POST("signup.php")

    Call registerUser(@Body Signup signup);

}[/shcode]

لازم به ذکره که برای اینکه سرویس registerUser اجرا بشه نیاز به 9 تا داده داره که اونها رو بصورت یه کلاس Model به اسم Signup درآوردم و خروجی سرویس هم که به صورت Json هستش بصورت یه کلاس Model به اسم SignupResponse درآوردم که در ادامه کدهای این دو کلاس و همین طور نمونه ای از خروجی رو در گذاشتم:

نمونه خروجی وب سرویس

{"message":"اطلاعات شما با موفقیت ثبت گردید. نام کاربری و رمز عبور به شماره تماس وارد شده ارسال گردید."}

کدهای مربوط به کلاس Signup

[shcode=java]public class Signup {

    private String name;

    private String family;

    private String mobile;

    private String dateOfBirth;

    private String province;

    private String brand;

    private String model;

    private String version;

    private String serialnumber;

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public String getFamily() {

        return family;

    }

    public void setFamily(String family) {

        this.family = family;

    }

    public String getMobile() {

        return mobile;

    }

    public void setMobile(String mobile) {

        this.mobile = mobile;

    }

    public String getDateOfBirth() {

        return dateOfBirth;

    }

    public void setDateOfBirth(String dateOfBirth) {

        this.dateOfBirth = dateOfBirth;

    }

    public String getProvince() {

        return province;

    }

    public void setProvince(String province) {

        this.province = province;

    }

    public String getBrand() {

        return brand;

    }

    public void setBrand(String brand) {

        this.brand = brand;

    }

    public String getModel() {

        return model;

    }

    public void setModel(String model) {

        this.model = model;

    }

    public String getVersion() {

        return version;

    }

    public void setVersion(String version) {

        this.version = version;

    }

    public String getSerialnumber() {

        return serialnumber;

    }

    public void setSerialnumber(String serialnumber) {

        this.serialnumber = serialnumber;

    }

}[/shcode]

کدهای مربوط به کلاس SignupResponse

[shcode=java]public class SignupResponse {

    @SerializedName("message")

    @Expose

    private String message;

    public String getMessage() {

        return message;

    }

    public void setMessage(String message) {

        this.message = message;

    }

}[/shcode]

حال مشکلی که من دارم اینه که زمانی که روی دکمه ثبت نام کلیک می کنم و سرویس بالا رو اجرا می کنم، کدهای مربوط به متد onFailure اجرا میشن و پیغام زیر در ویجت alertShowMessage چاپ میشه:

Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $

درصورتی که وقتی به phpMyAdmin رجوع می کنم رکودی در جدول مربوطه بدون داده هایی که توسط وب سرویس باید ارسال میشدن، درج شده.

چند روزی هست که با این مشکل درگیرم علت و راه حل مشکل رو نتونستم پیدا کنم

از دوستان کسی می دونه چرا فیلدهای کلاس Signup ارسال نشده و این پیغامی که چاپ شده به چه دلیلی هستش و راه حل برطرف کردنش چیه ؟؟؟

خواهشا راهنماییم کنید

با تشکر

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام دوست عزیز من تا حالا با این کتابخونه کار نکردم ولی دیدم کسی نیست کمکی کنه گفتم تا اونجا که بلدم که چیزی هم بلد نیستم چیزی بگم شاید کمکی باشه ..

اول اینکه تو این عبارت زیر منظورت اینه که میره و اطلاعات داخل دیتابیس ثبت میشه ؟؟؟؟؟

------------------------------------------------------------------------------------------------------

حال مشکلی که من دارم اینه که زمانی که روی دکمه ثبت نام کلیک می کنم و سرویس بالا رو اجرا می کنم، کدهای مربوط به متد onFailure اجرا میشن و پیغام زیر در ویجت alertShowMessage چاپ میشه:

درصورتی که وقتی به phpMyAdmin رجوع می کنم رکودی در جدول مربوطه بدون داده هایی که توسط وب سرویس باید ارسال میشدن، درج شده.

----------------------------------------------------------------------------------------------------------

اگه نه که معقول تر هم هست ..

چند چیز رو چک کن :

1-ببین فایل رابطت درست کار میکنه ؟

2-ببین اصلا فایل رابطت به دیتابیس وصل هست ؟

2-ببین لینک آدرس فایل رابطت رو درست دادی به برنامه ؟

اگه درست بودن :

فک کنم اخطاره مربوط به فایل رابطت هست چون اخطاره فک کنم میگه که نمیتونه جیسون رو بگیره و بخونه . و باید از کد فلان تو خط 1 کدهات استفاده کنی ....

JsonReader.setLenient(true)

شاید هم اگه اطلاعات از دیتابیس نیست و از یک فایلی هست که به صورت جیسون اطلاعات رو داخلش داره. اشکال از ستون اول خط اولش هست که نمیتونه بخونه اون اطلاعات رو که به صورت جیسنون هست.

-------------------------------------

یا اگه رکورد داخل دیتابیس ثبت شده ولی اطلاعات فارسی اشتباهه یعنی ؟؟؟؟؟؟ یا به صورت دیگه ای ناخوانا ثبت شده که اون مشکل دیگه ای هست.

البته همون طور که گفتم با این کتابخونه و با مباحث مربوط تا حالا کار نکردم ولی بازم امیدوارم مفید باشه.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

مشکل پیغامی که می داد حل شد اما مشکلی که هنوز پابرجاست عدم ارسال فیلدهای کلاس Signup هستش.

کسی از دوستان نیست که با این کلاس کار کرده باشه و بتونه منو راهنمایی کنه ؟؟؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...