gson如何识别类实例和数组?

时间:2014-04-19 14:25:22

标签: java android json error-handling 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

如何在不更改服务器响应的情况下检查错误情况?

1 个答案:

答案 0 :(得分: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;
    }
  }