Mustanser Iqbal Mustanser Iqbal - 4 months ago 52
Android Question

Get JSON array from retrofit Response

I need to parse 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 am not able to get "he" array from 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 am sending request to the server:

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


here is how i am sending request and handling response

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 "he" array from above response. Please help Thanks.

here is response that i am getting..

enter image description here

BNK BNK
Answer

UPDATE FOR Retrofit 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's 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 use your GetRoleData class

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

The screenshot as the following:

enter image description here

Comments