【问题标题】:How to get JSONArray data with retrofit2.0?如何使用retrofit2.0 获取JSONArray 数据?
【发布时间】:2017-03-09 06:04:30
【问题描述】:

我的界面是这样的:

public interface newArtsApi {

    @GET("art/get_all_arts?page=1")
    Call<List<ArtsPagination>> getMovies(@Query("index") int index);}

另一个 ServiceGenerator 类如下所示:

public class ServiceGenerator {

    public static <S> S createService(Class<S> serviceClass) {

        OkHttpClient httpClient=new OkHttpClient.Builder()
                .connectTimeout(30, TimeUnit.SECONDS)
                .readTimeout(30, TimeUnit.SECONDS)
                .writeTimeout(30, TimeUnit.SECONDS)
                .build();

        GsonBuilder gson = new GsonBuilder();
        gson.registerTypeAdapter(String.class, new StringDesirializer());

        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://...../clients/....../api/v1/")
                .addConverterFactory(GsonConverterFactory.create())
                .client(httpClient).build();

        return retrofit.create(serviceClass);

    }
}

我想要这种类型的数据使用 Retrofit 2.0,jsonarry_data

但解析此类数据时出现错误。

【问题讨论】:

  • 出现这样的错误......从上面的代码......预期BEGIN_ARRAY的响应错误,但在第1行第2列路径$中是BEGIN_OBJECT
  • 基本上,错误是说您的 JSON 正在返回一个对象,在您的 API 中,您已指定它应该接收一个 ArtsPagination 列表,在您发布的 JSONARRAY_DATA 图像中它返回一个对象。
  • 所以你能详细解释一下我怎样才能得到它...我在哪里进行更改..?
  • 在下面查看我的答案

标签: android pagination android-recyclerview retrofit2


【解决方案1】:

如果您想接收 ArtsPagination 的列表,您的代码没问题,问题出在服务器端,因为它的响应没有出现在列表中。如果您只想接收一个对象,则需要在界面上进行更改:

Call<ArtsPagination> getMovies(@Query("index") int index);

更改此设置,您还需要更新您的 onResponseonFailure 方法以将响应作为单个对象处理。

【讨论】:

    【解决方案2】:

    ApiInterface apiService = ApiClient.getClient().create(ApiInterface.class);

        Call<MoviesResponse> call = apiService.getTopRatedMovies(API_KEY);
        call.enqueue(new Callback<MoviesResponse>() {
            @Override
            public void onResponse(Call<MoviesResponse> call, Response<MoviesResponse> response) {
                int statusCode = response.code();
    
                // Log.w("ResponseCode ",response.body().getResults()+"");
                List<Movie> movies = response.body().getResults();
                recyclerView.setAdapter(new MoviesAdapter(movies, R.layout.list_item_movie, getApplicationContext()));
            }
    
            @Override
            public void onFailure(Call<MoviesResponse> call, Throwable t) {
                // Log error here since request failed
                Log.e(TAG, t.toString());
            }
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-26
      • 2021-08-23
      • 1970-01-01
      • 1970-01-01
      • 2022-12-28
      相关资源
      最近更新 更多