Reputation: 144
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
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
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