0

私は他の誰かによって書かれたJsonパーサークラスを持っています。このチェッカーメソッドでは何か悪いにおいがします:

    public boolean isCorrectResponse() {
    try {
        if (localResponse != null) {
            JSONObject jResponse = new JSONObject(localResponse);
            if (jResponse.get("result") instanceof JSONObject) { 
                JSONObject jResult = jResponse.getJSONObject("result");
                if (jResult.get("error") instanceof JSONArray) {
                    JSONObject jError = jResult.getJSONArray("error").getJSONObject(0);
                    if (!jError.toString().equals("")) {
                        String errorMsg = jError.getString("msg");
                        String errorCode = jError.getString("code");
                        showErrorMessage(errorCode + "; " + errorMsg);
                        return false;
                    }
                }
            }
        } else {
            return false;
        }
    } catch (JSONException e) {
        L.e("ERROR: on isCorrectResponse method!");
        e.printStackTrace();
        //return false; //Added myself Google Json should throw error shouldn't it??? Which means response was wrong???
    } 
    return true;
}

作成の最初の試行でエラーがスローされ JSONObject jResponse = new JSONObject(localResponse); 、すべてが即座に解決されるべきではありませんか (false を返すだけでよい)。これらの try body の追加チェックはまったく必要ですか? 私は Google Gson ライブラリを使用して Json を解析し、Android 向けに開発しています。

4

1 に答える 1

1

JSON の各タグを解析するのは大変な作業であり、(jResponse.get("result") JSONObject のインスタンス) をチェックするのはあまり良い考えではありません。

より良い使用

 JSONObject result =jResponse.get("result") instanceof JSONObject)
 if (result == null) return false;

とにかく、NullPointerException に catch を追加すると、これを回避できます。結果が null の場合、次のタグを解析しようとすると、アプリは例外をスローします

于 2013-07-26T08:05:54.080 に答える