Get JSON Array from Migrating Response

I need to parse a JSON array from Retrofit. I need to get the following key:

{ "rc":0, "message":"success", "he":[ { "name":"\u05de\u05e4\u05e7\u05d7", "type":0 } ] } 

I can easily get the message, but I cannot get the "he" array from the response.

Here is my data model class

 public class GetRoleData implements Serializable { @SerializedName("he") private ArrayList<Roles> he; @SerializedName("message") private String message; public GetRoleData() { this.he = new ArrayList<>(); this.message = ""; } public ArrayList<Roles> getUserRoles() { return he; } public String getMessage() { return message; } public class Roles { public Roles() { name = ""; type = -1; } @SerializedName("name") private String name; @SerializedName("type") private int type; public int getType() { return type; } public String getName() { return name; } } } 

This is how I send the request to the server:

 @POST("index.php/") Call<GetRoleData> getUserRoles(@Body SetParams body); 

this is how i send request and response processing

 APIService apiService = retrofit.create(APIService.class); Call<GetRoleData > apiCall = apiService.getUserRoles(params); apiCall.enqueue(new Callback<GetRoleData >() { @Override public void onResponse(retrofit.Response<GetRoleData > mUserProfileData, Retrofit retrofit) { Log.e("locale info", "mUserProfileData = " + mUserProfileData.body().toString()); if (pDialog != null) { pDialog.dismiss(); } if (mUserProfileData.body().getMessage().equals("success")) { Log.e("locale info", "user roles = " + mUserProfileData.body().getUserRoles().size()); } else { Toast.makeText(RegisterActivity.this, getResources().getString(R.string.get_role_error), Toast.LENGTH_SHORT).show(); } } @Override public void onFailure(Throwable t) { if (pDialog != null) { pDialog.dismiss(); } t.printStackTrace(); } }); 

What I want

I need to get the array "he" from the answer above. Please help Thanks.

here is the answer i get ..

enter image description here

+6
source share
5 answers

UPDATE FOR UPGRADE 2.0-beta2:

 dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.1.1' compile 'com.google.code.gson:gson:2.4' compile 'com.squareup.okhttp:okhttp:2.5.0' // compile 'com.squareup.retrofit:retrofit:1.9.0' compile 'com.squareup.retrofit:retrofit:2.0.0-beta2' compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2' } 

Interface:

 @GET("/api/values") Call<GetRoleData> getUserRoles(); 

MainActivity onCreate:

  // Retrofit 2.0-beta2 Retrofit retrofit = new Retrofit.Builder() .baseUrl(API_URL_BASE) .addConverterFactory(GsonConverterFactory.create()) .build(); WebAPIService service = retrofit.create(WebAPIService.class); // Asynchronous Call in Retrofit 2.0-beta2 Call<GetRoleData> call = service.getUserRoles(); call.enqueue(new Callback<GetRoleData>() { @Override public void onResponse(Response<GetRoleData> response, Retrofit retrofit) { ArrayList<GetRoleData.Roles> arrayList = response.body().getUserRoles(); if (arrayList != null) { Log.i(LOG_TAG, arrayList.get(0).getName()); } } @Override public void onFailure(Throwable t) { Log.e(LOG_TAG, t.toString()); } }); 

Retrofit 1.9

I am using your GetRoleData class

Interface:

 public interface WebAPIService { @GET("/api/values") void getUserRoles(Callback<GetRoleData> callback); } 

MainActivity:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // creating a RestAdapter using the custom client RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(API_URL_BASE) .setLogLevel(RestAdapter.LogLevel.FULL) .setClient(new OkClient(mOkHttpClient)) .build(); WebAPIService webAPIService = restAdapter.create(WebAPIService.class); Callback<GetRoleData> callback = new Callback<GetRoleData>() { @Override public void success(GetRoleData getRoleData, Response response) { String bodyString = new String(((TypedByteArray) response.getBody()).getBytes()); Log.i(LOG_TAG, bodyString); } @Override public void failure(RetrofitError error) { String errorString = error.toString(); Log.e(LOG_TAG, errorString); } }; webAPIService.getUserRoles(callback); } 

Screenshot as follows:

enter image description here

+6
source

Mocky for tests β†’ http://www.mocky.io/v2/567275072500008d0e995b2c I am using Retrofit 2 (beta-2). This works for me, nothing special about this:

Call Definition:

 @GET("/v2/567275072500008d0e995b2c") Call<Base> getMock(); 

Model:

 public class Base { public int rc; public String message; public List<Role> he; } public class Role { public String name; public int type; } 

Re-equipment:

 Retrofit retrofit = new Retrofit.Builder() .baseUrl(baseUrl) .addConverterFactory(GsonConverterFactory.create()) .build(); 

Call:

 webservice.getMock().enqueue(new Callback<Base>() { @Override public void onResponse(Response<Base> response, Retrofit retrofit) { } @Override public void onFailure(Throwable t) { } }); 
+3
source

You have correctly written all your getters except he . For Retrofit to parse your JSON file, you must write your getter for the he variable as follows.

 public ArrayList<Roles> getHe() { return he; } 

Also try removing the new ArrayList from the constructor.

 public GetRoleData() { // this.he = new ArrayList<>(); // <-- Remove here this.message = ""; } 
+2
source

// Use The Following Pojo Classes

 public class GetRoleData { @SerializedName("rc") @Expose private Integer rc; @SerializedName("message") @Expose private String message; @SerializedName("he") @Expose private List<He> he = new ArrayList<He>(); /** * * @return * The rc */ public Integer getRc() { return rc; } /** * * @param rc * The rc */ public void setRc(Integer rc) { this.rc = rc; } /** * * @return * The message */ public String getMessage() { return message; } /** * * @param message * The message */ public void setMessage(String message) { this.message = message; } /** * * @return * The he */ public List<He> getHe() { return he; } /** * * @param he * The he */ public void setHe(List<He> he) { this.he = he; } } -----------------------------------com.example.He.java----------------------------------- package com.example; import javax.annotation.Generated; import com.google.gson.annotations.Expose; import com.google.gson.annotations.SerializedName; public class He { @SerializedName("name") @Expose private String name; @SerializedName("type") @Expose private Integer type; /** * * @return * The name */ public String getName() { return name; } /** * * @param name * The name */ public void setName(String name) { this.name = name; } /** * * @return * The type */ public Integer getType() { return type; } /** * * @param type * The type */ public void setType(Integer type) { this.type = type; } } 
+1
source

Another easy way to get data using webservices is to use JsonElement and then convert it to JsonObject and parse JsonObject. Eg-Pz.

Note : JsonObject is not the same as JSONobject, JsonObject belongs to the GSON library

0
source

All Articles