با سلام و وقت بخیر
در یک 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 معرفی کنید.
ممنون از زمانی که برای پاسخگویی این سوال میگذارید.