2016-10-26 61 views
-1

我的界面看起來是這樣的:如何使用retrofit2.0獲取JSONArray數據?

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); 

    } 
} 

我想這種類型的使用改造2.0數據,jsonarry_data

JSONARRAY_DATA

但我解析這種類型的數據時出錯。

+0

得到錯誤這樣的..從上面的預期BEGIN_ARRAY代碼...響應錯誤但BEGIN_OBJECT位於第1行第2列路徑$ – alias26

+0

基本上錯誤是說你的JSON正在返回一個對象,你的API中你已經規定,它應該得到ArtsPagination的列表,您發佈它返回一個單一對象JSONARRAY_DATA形象。 – Rafael

+0

所以u能詳細解釋一下,我怎樣才能得到它...在那裏我做出改變..? – alias26

回答

0

ApiInterface apiService = ApiClient.getClient()創建(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()); 
     } 
    }); 
0

如果你想收到ArtsPagination的列表,你的代碼是確定的問題是在服務器端,因爲它的反應是不是在一個列表來。如果你想獲得只有一個對象,你需要改變這種在界面上:

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

改變這一點,你還需要更新您的onResponseonFailure方法來處理響應作爲一個單獨的對象。

+0

是的,我做到了,但我沒有得到列表[]數據.. – alias26