Tejas Shukla
Tejas Shukla

Reputation: 144

in rerofit i coundn't print JSON

In this code I will send id and mobile_no it retrieve me balance of user but it couldn't print in a Toast.

What am I missing here my work properly but I don't get response string

private void Get_Wallet_Amount() {
       Call<ResponseBody> call = AppController.getInstance().getApiInterface().getWalle_Data(Utils.getSharedPreference(getApplicationContext()).getString(Const.PREFERENCE_USER_ID,""),
               Utils.getSharedPreference(getApplicationContext()).getString(Const.PREFERENCE_MOBILE_NUMBER,""));
        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                String responseString = null;
                try {
                    Toast.makeText(Proceed_PaymentActivity.this, "HI", Toast.LENGTH_SHORT).show();
                    responseString = response.body().string();
                    JSONObject jsonObject = new JSONObject(responseString);
//It doesn't print output

                Toast.makeText(Proceed_PaymentActivity.this, ""+jsonObject.getString("wallet_amt"), Toast.LENGTH_SHORT).show();
             } catch (JSONException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
            Toast.makeText(Proceed_PaymentActivity.this, "Error", Toast.LENGTH_SHORT).show();
        }
    });
}

Retrofit Interface

@FormUrlEncoded
@POST("XXXX")
Call<ResponseBody> getWalle_Data(@Field("id") String uid,@Field("mobile") String mobile);

My JSON Output

[
    {
        "wallet_amt": 50
    }
]

Error Logcat org.json.JSONException: Value [{"wallet_amt":50}] of type org.json.JSONArray cannot be converted to JSONObject 10-13 12:39:37.793 28522-28522/abc.example.com.rechargeappdesugn W/System.err: at org.json.JSON.typeMismatch(JSON.java:111) 10-13 12:39:37.793 28522-28522/abc.example.com.rechargeappdesugn W/System.err: at org.json.JSONObject.(JSONObject.java:160) 10-13 12:39:37.793 28522-28522/abc.example.com.rechargeappdesugn W/System.err: at org.json.JSONObject.(JSONObject.java:173) 10-13 12:39:37.793 28522-28522/abc.example.com.rechargeappdesugn W/System.err: at abc.example.com.rechargeappdesugn.activity.Proceed_PaymentActivity$1.onResponse(Proceed_PaymentActivity.java:97) 10-13 12:39:37.793 28522-28522/abc.example.com.rechargeappdesugn W/System.err: at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68) 10-13 12:39:37.793 28522-28522/abc.example.com.rechargeappdesugn W/System.err: at android.os.Handler.handleCallback(Handler.java:751) 10-13 12:39:37.793 28522-28522/abc.example.com.rechargeappdesugn W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95) 10-13 12:39:37.793 28522-28522/abc.example.com.rechargeappdesugn W/System.err: at android.os.Looper.loop(Looper.java:154) 10-13 12:39:37.793 28522-28522/abc.example.com.rechargeappdesugn W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6119) 10-13 12:39:37.793 28522-28522/abc.example.com.rechargeappdesugn W/System.err: at java.lang.reflect.Method.invoke(Native Method) 10-13 12:39:37.793 28522-28522/abc.example.com.rechargeappdesugn W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 10-13 12:39:37.794 28522-28522/abc.example.com.rechargeappdesugn W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

Upvotes: 0

Views: 92

Answers (2)

KeLiuyue
KeLiuyue

Reputation: 8237

Your json is JSONArray .

Use JSONArray jsonArray = new JSONArray(responseString); in your code .

you have to use getString() instead of opString().

@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
    String responseString = null;
    try {
        Toast.makeText(Proceed_PaymentActivity.this, "HI", Toast.LENGTH_SHORT).show();
        responseString = response.body().string();
        // edited here
        JSONArray jsonArray = new JSONArray(responseString);
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            String wallet_amt = jsonObject.String("wallet_amt");
            Toast.makeText(Proceed_PaymentActivity.this, wallet_amt, Toast.LENGTH_SHORT).show();
        }
    } catch (JSONException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Upvotes: 2

silentsudo
silentsudo

Reputation: 6973

first of all you dont need to do any data manipulation related to response as retrofit internally handles this. Please use following code snippet to get it working.

 class Wallet {
        @SerializedName("wallet_amt")
        private Long amount;
    }

Call<List<Wallet>> call = AppController.getInstance().getApiInterface().getWalle_Data(Utils.getSharedPreference(getApplicationContext()).getString(Const.PREFERENCE_USER_ID,""),
                    Utils.getSharedPreference(getApplicationContext()).getString(Const.PREFERENCE_MOBILE_NUMBER,""));
            call.enqueue(new Callback<ResponseBody>() {
                @Override
                public void onResponse(Call<List<Wallet>> call, Response<List<Wallet>> response) {
                    String responseString = null;
                    try {

                    } catch (JSONException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

                @Override
                public void onFailure(Call<List<Wallet>> call, Throwable t) {
                    Toast.makeText(Proceed_PaymentActivity.this, "Error", Toast.LENGTH_SHORT).show();
                }
            });

Upvotes: 0

Related Questions