2017-04-17 45 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。謝謝你的幫助。現在我面臨顯示空陣列的概率。你能幫助我嗎? –