Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

like image 726
Mustanser Iqbal Avatar asked Dec 17 '15 06:12

Mustanser Iqbal


People also ask

What is JsonArray?

JsonArray represents an immutable JSON array (an ordered sequence of zero or more values). It also provides an unmodifiable list view of the values in the array. A JsonArray object can be created by reading JSON data from an input source or it can be built from scratch using an array builder object.

What is retrofit JSON?

Retrofit is a type-safe REST client for Android, Java and Kotlin developed by Square. The library provides a powerful framework for authenticating and interacting with APIs and sending network requests with OkHttp.


1 Answers

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

like image 57
BNK Avatar answered Sep 21 '22 23:09

BNK