I am trying to figure out how to parse JSON using Retrofit 2.1, and get an output array with Manager objects

Created a request in the interface, in MainActivity initialized Retrofit itself

JSON file:

  { "managers": [ {"name": "John Smith", "plan": "100"}, {"name": "Alex Sprite", "plan": "96"}, {"name": "Den Bollom", "plan": "2"}, {"name": "Jaromir Jagr", "plan": "68"}, {"name": "Wane Gretzky", "plan": "99"}, {"name": "Winsent Trade", "plan": "54"}, {"name": "Paul Dagger", "plan": "30"}, {"name": "Tommy Gun", "plan": "60"}, {"name": "Luc Perry", "plan": "15"}, {"name": "Tend Smarr", "plan": "64"} ] } 

ManagerApi

 public interface ManagerAPI { String URL = "https://api.myjson.com/bins/"; @GET("xkyz.json") Call<Manager> getManagers(); } 

Retrofit initialization method

  private void requestData() { Retrofit retrofit = new Retrofit.Builder() .baseUrl(ManagerAPI.URL) .addConverterFactory(JacksonConverterFactory.create()) .build(); ManagerAPI service = retrofit.create(ManagerAPI.class); } 

There is also a class Manager , with all the necessary hetero. I can not understand what to do next in this case.

  • Emm ... service.getManagers(); ? - JuriySPb

1 answer 1

First you need to format JSON:

 [ {"name": "John Smith", "plan": "100"}, {"name": "Alex Sprite", "plan": "96"}, {"name": "Den Bollom", "plan": "2"}, {"name": "Jaromir Jagr", "plan": "68"}, {"name": "Wane Gretzky", "plan": "99"}, {"name": "Winsent Trade", "plan": "54"}, {"name": "Paul Dagger", "plan": "30"}, {"name": "Tommy Gun", "plan": "60"}, {"name": "Luc Perry", "plan": "15"}, {"name": "Tend Smarr", "plan": "64"} ] 

RequestData implementation:

  private void requestData() { Retrofit retrofit = getRetrofit(); ManagerAPI service = retrofit.create(ManagerAPI.class); Call<List<Manager>> call = service.getManagers(); call.enqueue(new Callback<List<Manager>>() { @Override public void onResponse(Call<List<Manager>> call, Response<List<Manager>> response) { Log.e("OnResponce", "OK"); if (response.isSuccessful()){ List<Manager> managers = response.body(); tw = (TextView) findViewById(R.id.textView); tw.setText(String.valueOf(managers.get(0).getName() + " "+ managers.get(0).getPlan())); System.out.println(managers.toString()); } else { Log.e("Response Successful?", "NO"); Log.e("response.message",response.message()); Log.e("response.code", String.valueOf(response.code())); Log.e("response.body", String.valueOf(response.body())); } } @Override public void onFailure(Call<List<Manager>> call, Throwable t) { Log.e("OnFailure", "Fail"); Log.e((t.getMessage()), t.getMessage()); } }); } @NonNull private Retrofit getRetrofit() { return new Retrofit.Builder() .baseUrl(ManagerAPI.URL) .addConverterFactory(JacksonConverterFactory.create()) .build(); } 

call creates a new request, then it starts in a new asynchronous stream. ( enqueue , if literally - add to the end of the queue). If the request is successful, the data can be obtained from response.body() ;