web-dev-qa-db-ja.com

未処理の例外org.json.jsonexception

Androidアプリで作業しています。アプリはJavaオブジェクトをjson形式でSQLiteデータベースに保存する必要があります。この操作のコードを作成したら、Jsonオブジェクトを抽出し、Javaオブジェクトに再変換する必要があります。 jsonオブジェクトを文字列に逆シリアル化するメソッドを呼び出そうとすると、Android Studio:unhandled exception org.json.jsonexceptionでこのエラーが見つかりました

JSONException eをキャッチしようとすると、プログラムは実行されますが、jsonオブジェクトをデシリアライズしません。

これはメソッドのコードです:

private void read() throws JSONException {
    SQLiteDatabase db = mMioDbHelper.getWritableDatabase();
    String[] columns = {"StringaAll"};
    Cursor c = db.query("Alle", columns, null, null, null, null,null );
    while(c.moveToNext()) {
        String stringaRis =  c.getString(0);
        JSONObject jObj = new JSONObject(stringaRis);
        String sPassoMed = jObj.getString("passoMed");
        final TextView tView = (TextView) this.findViewById(R.id.mainProvaQuery);
        tView.setText(sPassoMed);
        // }
    }
}

助けてくれませんか?

11
marsec

はい、例外をキャッチする必要があります。

しかし、あなたがそれを捕まえるとき、あなたはそれを床に投げるだけではありません。あなたのアプリケーションは何かする例外についてする必要があります。または、実行時に例外が発生することを期待していない場合は、少なくとも報告する必要があります。最小限の例です(Androidアプリ)

try {
    ...
    JSONObject jObj = new JSONObject(stringaRis);
    ...
} catch (JSONException e) {
    Log.e("MYAPP", "unexpected JSON exception", e);
    // Do something to recover ... or kill the app.
}

もちろん、これで問題が解決するわけではありません。次に行う必要があるのは、例外が発生している理由を把握することです。 logcatに記録した例外メッセージを読むことから始めます。


この例外メッセージについて:

org.json.JSONException:Java.lang.String型の値AはJSONObjectに変換できません

私はそれがこの行によってスローされると仮定します:

    JSONObject jObj = new JSONObject(stringaRis);

stringaRisの値は"A" ...そして、それはJSONオブジェクトとして解析できません。 JSONではありません。

23
Stephen C