簡體   English   中英

如何使用retrofit2和RXJava2獲取JSONArray

[英]How to fetch JSONArray using retrofit2 and RXJava2

我正在使用 Retrofit2 和 RxJava2 從服務器獲取數據。我有以下格式的響應:

 {
   "product_data": [
    {
        "product_name": "Pi-Pi jod kar ye Notebook li hai",
        "product_price": "249.00",
        "category_id": "9",
        "product_id": "125",
        "product_photo": "1574935198_1.jpg"
    },
    {
        "product_name": "Tere Jesa year kaha kaha esa yarana",
        "product_price": "249.00",
        "category_id": "9",
        "product_id": "128",
         "product_photo": "1574935455_1.jpg"
     }
    ]
   } 

我在下面收到異常:

Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $.

ApiService.class

public interface ApiService {

@GET("general_cat_api")
Observable<List<HomeGeneralModel>> getData();

}

RetrofitClient.class

public class RetrofitClient {

private static Retrofit retrofit = null;

public static Retrofit getInstance(){


    OkHttpClient okHttpClient = new OkHttpClient.Builder()
            .connectTimeout(22, TimeUnit.SECONDS)
            .readTimeout(22, TimeUnit.SECONDS)
            .writeTimeout(22, TimeUnit.SECONDS)
            .build();

    if(retrofit == null)
        retrofit = new Retrofit.Builder()
                .baseUrl("http://aamku.com/api/")
                .addConverterFactory(GsonConverterFactory.create(new GsonBuilder().setLenient().create()))
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .client(okHttpClient)
                .build();

    return retrofit;

}

private RetrofitClient(){

  }
}

現在我正在使用像下面這樣的改造來獲取數據:

private void getData(){

    Retrofit retrofit = RetrofitClient.getInstance();
    ApiService myApi = retrofit.create(ApiService.class);

    myApi.getData().subscribeOn(Schedulers.io())
                   .observeOn(AndroidSchedulers.mainThread())
                   .subscribe(new Observer<List<MenuModel>>() {
                       @Override
                       public void onSubscribe(Disposable d) {

                       }

                       @Override
                       public void onNext(List<MenuModel> menuModels) {

                           if(menuModels.size() > 0){

                               menuProg.setVisibility(View.INVISIBLE);
                               list.addAll(menuModels);

                               adapter = new MenuAdapter(list,MainActivity.this);
                               menuRecycler.setAdapter(adapter);
                           }
                       }

                       @Override
                       public void onError(Throwable e) {

                           menuProg.setVisibility(View.INVISIBLE);
                           Toast.makeText(getApplicationContext(),e.getMessage(),Toast.LENGTH_SHORT).show();
                       }

                       @Override
                       public void onComplete() {

                       }
                   });
}

有人請讓我知道為什么我會收到此異常。任何幫助將不勝感激。

謝謝

您的回復格式在這里是錯誤的

Observable<List<HomeGeneralModel>> getData();

由於您正在獲得一個 json 對象作為響應,因此您不需要 List。 在 observable 中直接使用HomeGeneralModel

您的product_data列表應該在 HomeGeneral 模型內

應該是這樣的

  Observable<HomeGeneralModel> getData();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM