2014-04-19 56 views
0

我發送一些數據到我的服務器並得到響應。gson如何識別類實例和數組?

萬一出現錯誤的響應是一個類的實例:

{ 
errorCode (int), 

errorMsg (String) 
} 

在成功的情況下的響應是一個項目陣列。

我試圖運行下面的代碼,並得到了一個錯誤:

代碼:

private void afterServerOfferResponse(final Gson gson, 
         String result) { 
        ServerErrorMessage serverErrorMessage = gson.fromJson(
          result, ServerErrorMessage.class); 

if (serverErrorMessage.errorCode == 0) { 
         Type collectionType = new TypeToken<ArrayList<Offer>>() { 
         }.getType(); 
         mOffersList = gson.fromJson(result, collectionType); 
         mAdapter = new ImageAdapter(OffersListActivity.this, 
           mOffersList); 
         mListView.setAdapter(mAdapter); 

錯誤:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 

你會如何檢查出錯誤的情況不改變服務器響應太多?

回答

0

添加一個try-catch塊來處理異常。只有當您嘗試解析數據時,如果其有效的JSON響應或錯誤將被驗證。

首先嚐試解析Array Class例如,如果JSON異常,然後用ServerErrorMessage class

解析添加這個樣子,和處理異常時Syntax Exception

try{ 
     ServerErrorMessage serverErrorMessage = gson.fromJson(
      result, ServerErrorMessage.class); 
    }catch (JsonSyntaxException e){ 
     // handle the exception 
    } 
    catch (JsonIOException e){ 
     // handle the exception 
    } 
    catch (JsonParseException e){ 
     // handle the exception 
    }catch (IOException e){ 
     // handle the exception 
    } 

另一種方法是使用org.json.JSONObject這樣

private boolean isValidJsonResponse(String responseString){ 
    try { 
     new JSONObject(responseString); 
     return true; 
    } catch(JSONException e) { 
     return false; 
    } 
    } 
+0

但是,錯誤響應和列表項都是有效的,我只是wa nt來區分它們。將無錯格式放入catch塊是否正確? –

+0

不要在catch-block裏面做。有兩種不同的方法。首先調用一個方法來解析數組類,如果有任何異常,然後調用其他方法解析錯誤消息 – Libin

+0

請參閱我的編輯代碼plaats –