【问题标题】:Receive & Output JSON Error Message Android接收和输出 JSON 错误消息 Android
【发布时间】:2017-09-12 21:31:56
【问题描述】:

我创建了一个 API 用于从数据库中检索数据。现在,无论我输入的凭据是否正确,我都可以从 API 中检索状态、消息和数据。有两个版本的输出。我使用 POSTMan 进行测试,它似乎可以工作,但是当我在 Android 上尝试时,成功消息是好的,但不是错误消息。

@POST
@Path("/appdatas")
public Response getSAppData(AppDataRequest adr) {
    Response data = ads.getSAppData(adr.getId(), adr.getEmail(), adr.getPassword());
    return data;
}

@SuppressWarnings("unchecked")
public Response getSAppData(int id, String email, String password){
    Map<String, AppData> AppDataHM = new HashMap<String, AppData>(); 
    Map<String, Data> DataHM1 = new HashMap<String, Data>();
    Map<String, List<String>> DataHM2 = new HashMap<String, List<String>>();
    Map ADHMDHM = new HashMap<>();

    Data data = DataHM.get(new AppDataRequest (id, email, password));
    List<String> message = new ArrayList<>();
    List<String> data2 = new ArrayList<>();

    if(data != null){
        message.add("");
        AppDataHM.put("AppData", new AppData("success", message));
        DataHM1.put("Data", data);
        ADHMDHM.putAll(AppDataHM);
        ADHMDHM.putAll(DataHM1);
        String ADHMDHM1 = new Gson().toJson(ADHMDHM);
        return Response.status(200).entity(ADHMDHM1).build();
    }
    else{
        message.add("Your login information is invalid. Please try with the correct information");
        AppDataHM.put("AppData", new AppData("error", message));
        DataHM2.put("Data", data2);
        ADHMDHM.putAll(AppDataHM);
        ADHMDHM.putAll(DataHM2);
        String ADHMDHM2 = new Gson().toJson(ADHMDHM);
        return Response.status(500).entity(ADHMDHM2).build();
    }   
}

当我使用 POSTMan 时,我能够检索两个输出。

{
  "AppData": {
  "status": "success",
  "message": [
  ""
    ]
  },
  "Data": {
    "token": "token1"
  }
}

{
  "AppData": {
    "status": "error",
    "message": [
      "Your login information is invalid. Please try with the correct information"
    ]
  },
  "Data": []
}

当我在 Android 上应用以下代码时,我能够检索成功的数据,但不能检索错误的数据。

private void makeJsonObjectRequest(){
    showpDialog();

    String id1 = mEditTextID.getText().toString();
    String email1 = mEditTextEmail.getText().toString().trim();
    String password1 = mEditTextPassword.getText().toString();

    HashMap<String, String> params = new HashMap<String, String>();
    params.put("id", id1);
    params.put("email", email1);
    params.put("password", password1);

    JsonObjectRequest request = new JsonObjectRequest(url, new JSONObject(params), new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            try {
                JSONObject AppData = response.getJSONObject("AppData");
                String status = AppData.getString("status");
                String message = AppData.getString("message");
                //JSONObject Data = response.getJSONObject("Data");
                //String token = Data.getString("token");

                jsonResponse = "";
                jsonResponse += "Status: " + status + "\n";
                jsonResponse += "\n";
                jsonResponse += "Message: " + message + "\n";
                //jsonResponse += "\n";
                //jsonResponse += "Token: " + token + "\n";

                mTextViewMain.setText(jsonResponse);
                hidepDialog();
            } catch (JSONException e) {
                e.printStackTrace();
                Toast.makeText(getActivity(),
                        "Error: " + e.getMessage(),
                        Toast.LENGTH_SHORT).show();
            }
            hidepDialog();
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            VolleyLog.d(TAG, "Error1: " + error.getMessage());
            Toast.makeText(getActivity(),
                    "Error2: " + error.getMessage(), Toast.LENGTH_SHORT).show();
            hidepDialog();
        }
    });
    AppController.getInstance().addToRequestQueue(request);
}

我怎样才能获得“错误”输出中所示的输出并显示在 TextView 中?

感谢大家查看这个问题。

【问题讨论】:

  • 字符串消息 = AppData.getString("message");这不是字符串,这是 jsonArray。
  • 在TextView中设置之前是否打印了消息字符串
  • 回答有帮助吗?
  • 嗨。 @KuldeepKulkarni 感谢您的评论。我已经尝试过 getString 和 getJSONArray 方法,它们都对我有用。
  • 嗨。 @Chetan 也感谢您的评论。打印消息字符串是什么意思?你能帮忙详细说明一下吗?

标签: java android json list hashmap


【解决方案1】:

为什么在脚本中返回状态 500? Volley 将代码 500 假定为错误

return Response.status(500).entity(ADHMDHM2).build();

尝试将其更改为 200 并检查

【讨论】:

  • 嗨。 @Niruplyer 感谢您的回复。你的回复确实解决了我的问题。现在,我面临的问题是如何在 TextView 上显示一个空数组?你能帮帮我吗?
【解决方案2】:

您可以使用此link 为 json 生成具体类。一旦有了具体的类,就可以使用GSON 将 json 文本转换为类。这样,您将拥有具体的 json 到类的映射。 这可能会有所帮助。

【讨论】:

  • 嗨。 @AshwaniK 您的“具体课程”是否类似于 TODO 课程?如果您在谈论 Java 的“类”,我的 Java 程序中已经有它,但我的 Android 程序没有。我应该将“具体类”添加到我的 Android 程序吗?
  • 具体类是指您要将 json 响应转换为的具体类。通常,将类映射到 json 有助于提高可读性和可维护性。
【解决方案3】:

Message 试试这个:

JSONArray messageArray = AppData.getJSONArray("message");
String message = messageArray.toString();

【讨论】:

  • 嗨。 @FerdousAhamed 我尝试了 getString 和 getJSONArray ,它们都工作并给了我相同的预期输出。这段代码可能无法解决我的问题,但它确实帮助我改进了我的代码,因为我将所有用于数组的 toString 代码替换为 toJSONArray。谢谢你的帮助。现在我面临显示空数组的问题。你能帮我吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多