【问题标题】:unhandled exception org.json.jsonexception未处理的异常 org.json.jsonexception
【发布时间】:2015-01-24 21:10:35
【问题描述】:

我正在开发一个 android 应用程序,该应用程序必须将一个 json 格式的 java 对象保存到 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);
        // }
    }
}

你能帮帮我吗?

【问题讨论】:

  • 你能发布 JSONException 的堆栈跟踪吗?
  • 你是这个意思吗? 577 java.lang.NumberFormatException 28 1 java.lang.Long.invalidLong(Long.java:124) 568 java.lang.NumberFormatException 28 1 java.lang.StringToReal.invalidReal(StringToReal.java:63) 555 org.json.JSONException 28 1 org.json.JSON.typeMismatch(JSON.java:111)

标签: java android json sqlite


【解决方案1】:

是的,您需要捕获异常。

但是当你抓住它时,你不应该只是把它扔在地板上。您的应用程序需要对异常做一些事情。或者,如果您/它不希望在运行时发生异常,那么至少您应该报告它。这是一个最小示例(适用于 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。

【讨论】:

  • 感谢 Stephen C,我使用此代码读取的异常消息是:org.json.JSONException: Value A of type java.lang.String cannot be convert to JSONObject
  • 好的,但是如果我比较 json 字符串,在我将它存储在数据库中之前,它们与 stringaRis 是相等的。如果我尝试反序列化原始字符串,它运行良好,但是当我尝试反序列化 stringaRis 时,我发现了异常。这怎么可能?
  • 您需要通过在日志消息中打印出来来确认stringaRis 不是JSON 的诊断。然后你需要弄清楚为什么。 “怎么可能?” - 那是你自己想办法! (但怀疑并不能解决问题。)
猜你喜欢
  • 1970-01-01
  • 2011-11-19
  • 1970-01-01
  • 1970-01-01
  • 2011-01-16
相关资源
最近更新 更多