2016-10-26 6 views
-1

Meine Schnittstelle sieht wie folgt aus:Wie bekomme ich JSONArray Daten mit Retrofit2.0?

public interface newArtsApi { 

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

Eine weitere ServiceGenerator Klasse sieht wie folgt aus:

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

    } 
} 

Ich möchte diese Art von Daten unter Verwendung von Retrofit 2.0 jsonarry_data

JSONARRAY_DATA

aber Ich bekomme einen Fehler beim Parsen dieser Art von Daten.

+0

Fehler wie folgt erhalten .. von oben Code ... Antwort Fehler für erwartete BEGIN_ARRAY aber war BEGIN_OBJECT bei Zeile 1 Spalte 2 Pfad $ – alias26

+0

Grundsätzlich sagt der Fehler, dass Ihr JSON ein Objekt zurückgibt, in Ihrer API haben Sie hat angegeben, dass es eine Liste von ArtsPagination erhalten soll, in dem JSONARRAY_DATA-Bild, das Sie gepostet haben, dass es ein einzelnes Objekt zurückgibt. – Rafael

+0

so können Sie im Detail erklären, wie kann ich es bekommen ... wo mache ich Änderungen ..? – alias26

Antwort

0

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()); 
     } 
    }); 
0

Wenn Sie die Liste von ArtsPagination erhalten möchten, ist der Code ok das Problem auf der Server-Seite ist, weil es Antwort ist in einer Liste nicht kommen. Wenn Sie nur ein Objekt erhalten wollen, müssen Sie diese auf Ihre Schnittstelle ändern:

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

dies ändern und Sie müssen auch Ihre onResponse und onFailure Methoden aktualisieren, um die Antwort als ein einzelnes Objekt zu behandeln.

+0

Ja, ich habe es getan, aber ich habe keine Liste [] Daten .. – alias26

Verwandte Themen