2017-04-17 30 views
1

我创建了一个用于从数据库检索数据的API。现在,无论我输入的凭据是否正确,我都能够从API中检索状态,消息和数据。有两个版本的输出。我使用POSTMan进行测试,它似乎工作,但当我尝试在Android上,成功消息是好的,但不是错误之一。接收并输出JSON错误信息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); 
} 

Success

Error

我怎么可能可以得到输出显示在TextView的的 '错误' 输出和显示?

感谢大家查看这个问题。

+0

字符串消息= AppData.getString( “消息”);这不是字符串,这是jsonArray。 –

+0

在TextView中设置之前是否打印了消息字符串 –

+0

有没有答案帮助? –

回答

1

为什么你在你的脚本返回状态的500?凌空假定代码500作为误差

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

尝试改变到200,并检查

+0

嗨。 @Niruplyer感谢您的回复。你的回复确实解决了我的问题。现在,我面临着如何可能在TextView上显示一个空数组的问题?你能帮我么? –

0

您可以使用此link生成json的具体类。一旦你有具体的类,那么你可以使用GSON将JSON文本转换为类。这样你将有具体的JSON类映射。 可能会有帮助。

+0

嗨。 @AshwaniK你的“具体类”与TODO类相似吗?如果你正在谈论Java的“类”,我已经在我的Java程序中使用它,但是我的Android程序没有。我应该将“具体类”添加到我的Android程序中吗? –

+0

具体类意味着你想要转换你的json响应。通常它有助于将类映射到json以获得更好的可读性和可维护性。 –

0

Message试试这个:

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

嗨。 @FerdousAhamed我试过getString和getJSONArray,他们都工作,并给我相同的预期输出。这段代码可能无法解决我的问题,但它确实帮助我更好地编写代码,因为我将所有toString代码的数组替换为toJSONArray。谢谢你的帮助。现在我面临显示空阵列的概率。你能帮助我吗? –