تبدیل volley به retrofit

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

با سلام و وقت بخیر

در یک API وقتی URL را ارسال میکنید response بازگشتی سه تا کلید داره. Success و Messages  و Data . مشابه زیر. البته تعداد item های Data زیاد هستند.

{
    "Success": true,
    "Messages": [],
    "Data": [
        {
            "Code": "90006",
            "Title": "اتود اونر جديد",
            "Price": "",
            "Description": "",
            "ID": 60,
            "BarCode": "880916621565388091662184498809166217282 8809166214595 ",
            "Qty": "23"
        },
        {
            "Code": "90008",
            "Title": "اتود اينوكس",
            "Price": "",
            "Description": "",
            "ID": 62,
            "BarCode": "6948684102105",
            "Qty": "0"
        },
        {
            "Code": "90020",
            "Title": "استامپ كورش",
            "Price": "",
            "Description": "",
            "ID": 74,
            "BarCode": null,
            "Qty": "0"
        }
    ]
}

 

در کلاس ApiService به کمک Volley تونستم اطلاعات را از این فایل json استخراج کنم و نمایش بدم. (عکس ضمیمه شده) در واقع data میشه همان response ای که در  فیلم ها توضیح داده شده و من message , success را جداکردم.

public void getProducts(int countProducts,getProductCallback callback){
        String url=baseUrl+"Product/Products?Token="+ new MyUserManager(context).getToken();
        JsonObjectRequest jsonObjectRequest=new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {

         @Override
        public void onResponse(JSONObject response) {
              Log.i(TAG, "Api service onResponse Product: OK");
              boolean success=false;
              JSONArray message=null;
              JSONArray data=null;
              try {
                    success = response.getBoolean("Success");
                    message=response.getJSONArray("Messages");
                    data = response.getJSONArray("Data");
              }
              catch (Exception e) {
                  e.printStackTrace();
              }
             if(data.length()>0){
                  List<Product> productsList=new ArrayList<>();
                  Log.i(TAG, "Api service Data : OK");
                  int countOfProducts=(countProducts<=0?data.length():countProducts); //0 =>all products

                  for (int i = 0; i < countOfProducts ; i++) {
                      try {
                          JSONObject productJsonObject   = data.getJSONObject(i);
                          Product product=gson.fromJson(productJsonObject.toString(), Product.class);
                          productsList.add(product);
                          Log.i(TAG, "Api service add product "+i);

                      } catch (JSONException e) {
                          e.printStackTrace();
                      }
                  } //end of for
                  callback.OnSuccess(productsList,null);
                  Log.i(TAG, "Api service callback productslist ");
            }
             else if(message.length()>0){
                 String msg= null;
                 msg = message.toString();
                 callback.OnSuccess(null,msg);
             }

        }
      }, new Response.ErrorListener() {
          @Override
          public void onErrorResponse(VolleyError error) {
                callback.onError(error);
              Log.i(TAG, "Api service callback Error productslist ");
          }
      });
      jsonObjectRequest.setTag(TAG + "Product");
      jsonObjectRequest.setRetryPolicy(new DefaultRetryPolicy(10000,3,2));
      requestQueue.add(jsonObjectRequest);

      Log.i(TAG, "Api service add  jsonObjectRequest to requestQueue");
  }
    interface getProductCallback{
        void OnSuccess(List<Product> productsList ,String message);
        void onError(VolleyError error);

    }

در فرگمنت home هم کالاها را گرفتم.

apiService.getProducts(0,new ApiServiceVolley.getProductCallback() {
                @Override
                public void OnSuccess(List<Product> list,String message) {
                    if(list != null) {
//                        MyRemoteRepository.setProductList1(list);
                        productList1=new ArrayList<>();

                        Product product;
                        for (int i = 0; i < list.size() ; i++) {
                            product=list.get(i);
                            productList1.add(product);
                        }
//                        showRecycelViewProductList1(MyRemoteRepository.getProductList1());
                        showRecycelViewProductList1(productList1);
                    }
                    else{
                        //ToDo show message
                    }
                }
                //
                @Override
                public void onError(VolleyError error) {
                    Log.i(TAG, "onError: " + error);
                }
            });

الان سوال من این هست که میخوام volley را به Retrofit تبدیل کنم. راهکار چیه؟

 

چون data هام زیاده باید از paging۳ استفاده کنم و مجبورم Retrofit  و  rxjava را بکار ببرم. اولین کارم اینه که بتونم volley را به Retrofit تبدیل کنم. 

 

لطف کنید یه منبع اموشی کامل retrofite معرفی کنید.

 

ممنون از زمانی که برای پاسخگویی این سوال میگذارید.

 

 

فایل پیوست

0
حذف شده

سلام مجدد وقتتون بخیر

 

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

 

برای این کار پلاگین هایی وجود دارند که برامون model میسازند که باز این این مورد رو در ادامه یاد میگیرید .

 

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

یا از این سایت استفاده کنید و جیسونتون رو بهش بدید تا براتون مدل مربوطه رو بسازد : لینک

 

من هم براتون مدل مربوط به جیسونی که ارسال کردید در زیر قرار میدم تا استفاده کنید.

حال میتونید با لایبرری رتروفیت از مدل هاتون استفاده کنید و دیتاتون رو نمایش بدید .

 

دلیل ساده بودن جیسون در این سرفصل این هست دانشجو پله پله مطالب رو یاد بگیره تا در ادامه با مثال های پیچیده تری اشنا بشود.

public class Datum{
    @JsonProperty("Code") 
    public String code;
    @JsonProperty("Title") 
    public String title;
    @JsonProperty("Price") 
    public String price;
    @JsonProperty("Description") 
    public String description;
    @JsonProperty("ID") 
    public int iD;
    @JsonProperty("BarCode") 
    public String barCode;
    @JsonProperty("Qty") 
    public String qty;
}

public class Root{
    @JsonProperty("Success") 
    public boolean success;
    @JsonProperty("Messages") 
    public List<Object> messages;
    @JsonProperty("Data") 
    public List<Datum> data;
}
فایل پیوست

پوریا شفیعی

توسط

پوریا شفیعی

15 مرداد 00

حذف شده
سپاس متوجه شدم، یعنی برای هر کلید یه کلاس مجزا درست کنیم. در فیلم ها پلاگین تبدیل json to katlin را دیدم اما چون جاوا داشتم به صورت دستی خودم کلاس را درست کردم و برای تبدیل نام ها به صورت دستی هم از @SerializedName استفاده کردم. بله آموزش های استاد مرحله به مرحله و عالی هستند اما چون برای تحویل کار محدودیت زمان دارم مجبور فعلا از بخشی از آموزش ها بگذرم، و بعدا سر فرصت کار کنم
حذف شده
سلام مجدد ، این لینک بسیار عالی بود. واقعا سپاسگزارم https://json2csharp.com/json-to-pojo الان همین آموزش retrofite ای که در این بخش( اتصال به سرور ) با این نوع فایل json که دارم قابل استفاده است یا خیر نیاز به تغییرات داره
حذف شده
قابل استفاده هست اما در ادامه خیلی دقیق تر در پروژه یاد خواهید گرفت
پوریا شفیعی

16 مرداد 00

0
حذف شده

سلام و احترام 

 

تمام این مباحث در دوره پوشش داده شده و شما لازم هست به ترتیب سرفصل ها رو ببینید تا به این هدف برسید .

 

فایل پیوست

پوریا شفیعی

توسط

پوریا شفیعی

15 مرداد 00

حذف شده
۰ سلام . در API که من دارم گفتم که سه تا کلید برمیگرده و فعلا در بخش نمایش داده ها از Data استفاده میکنم. اگر در data چیزی نبود باید به message نگاه کنم. در فیلم ها response خیلی ساده است و کل بدنه برای تبدیل به Student مناسب هست و من نمیتونم از کل response بازگشتی در Api خودم استفاده کنم. چه طور کلیدها را در Retrofit جدا کنم. در Volley کدها را ارسال کردم. هر سه کلید را جداگانه گرفتم و بعد روی از روی Data لیست products را استخراج کردم
0
حذف شده

سلام . در فیلم های استاد وقتی response را تحویل میگیره خودش اطلاعات دانشجویان هست. ولی در API که من دارم گفتم که سه تا کلید برمیگرده و فعلا در بخش نمایش داده ها از Data  استفاده میکنم. اگر در data چیزی نبود باید به message نگاه کنم.

 

در فیلم ها response خیلی ساده است و کل بدنه برای تبدیل به Student مناسب هست و من نمیتونم از کل response بازگشتی در Api خودم استفاده کنم.

چه طور کلیدها را در Retrofit جدا کنم. در Volley کدها را ارسال کردم. هر سه کلید را جداگانه گرفتم و بعد روی از روی Data لیست products را استخراج کردم

فایل پیوست

راضیه کارگر شورکی

توسط

راضیه کارگر شورکی

15 مرداد 00