In rerofit i coundn't print JSON



在这段代码中,我会发送id和mobile_no,它会检索我的用户余额,但无法在Toast中打印。

我在这里错过了什么我的工作正常,但我没有得到响应字符串

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

改装接口

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

我的JSON输出

[
{
"wallet_amt": 50
}
]

错误日志猫org.json.JSONException:org.json.JONArray类型的值[{"wallet_amt":50}]无法转换为JSONObject10-13 12:39:37.993 28522-28522/abc.example.com.rechargeappdesign W/System.err:at-org.json.json.typeMismatch(json.java:111)10-13 12:39:37.993 28522-28522/abc.example.com.rechargeappdesign W/System.err:在org.json.JSONObject.(JSONObject.java:160)10-13 12:39:37.993 28522-28522/abc.example.com.rechargeappdesign W/System.err:在org.json.JSONObject.(JSONObject.java:173)10-13 12:39:37.993 28522-28522/abc.example.com.rechargeappdesign W/System.err:在abc.example.com/rechargeappdessign.activity.Proceed_PaymentActivity$1.onResponse(Proceed_Payment activity.java:97)10-13 12:39:37.993 28522-28522/abc.example.com.rechargeappdesign W/System.err:在retrofit2.ExecutiorCallAdapterFactory$ExecutiorCallbackCall$1$1.run(ExecutiorCallAdapter Factory.java:68)10-13 12:39:37.993 28522-28522/abc.example.com.rechargeappdesign W/System.err:在android.os.Handler.handleCallback(Handler.java:751)10-13 12:39:37.993 28522-28522/abc.example.com.rechargeappdesign W/System.err:在android.os.Handler.dispatchMessage(Handler.java:95)10-13 12:39:37.993 28522-28522/abc.example.com.rechargeappdesign W/System.err:在android.os.Looper.loop(Looper.java:154)10-13 12:39:37.993 28522-28522/abc.example.com.rechargeappdesign W/System.err:在android.app.ActivityThread.main(ActivityThreads.java:6119)10-13 12:39:37.993 28522-28522/abc.example.com.rechargeappdesign W/System.err:在java.lang.reflect.Method.ioke(Native Method)10-13 12:39:37.993 28522-28522/abc.example.com.rechargeappdesign W/System.err:在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)10-13 12:39:37.794 28522-28522/abc.example.com.rechargeappdesign W/System.err:在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

您的json就是JSONArray

在代码中使用JSONArray jsonArray = new JSONArray(responseString);

您必须使用getString()而不是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();
}
}

首先,您不需要进行任何与响应相关的数据操作,因为改装会在内部处理这一问题。请使用以下代码片段使其工作。

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

最新更新