【问题标题】:Android SQLite data is not being added未添加 Android SQLite 数据
【发布时间】:2015-04-30 08:16:25
【问题描述】:

我正在使用以下代码将 JSON 数组添加到 SQLite 数据库:

QuestionORM 类:

public static void insertQuestion(Context c,JSONArray jarr,String search) throws JSONException {
    DatabaseWrapper databaseWrapper = new DatabaseWrapper(c);
    if(isDatabaseOpened())
    {
        myDataBase = databaseWrapper.getWritableDatabase();
        ContentValues values = postToContentValues2(jarr);
        values.put(QuestionORM.COLUMN_SEARCH,search);
        long questionId = myDataBase.insert(QuestionORM.TABLE_NAME, "null", values);
        Log.e(TAG, "Inserted new Question with ID: " + questionId);
        myDataBase.close();
    }
}

private static ContentValues postToContentValues2(JSONArray jsonArray) throws JSONException {
    ContentValues values = new ContentValues();
    for(int i=0;i<jsonArray.length();i++)
    {
        JSONObject job1 = jsonArray.getJSONObject(i);
        if(job1!=null)
        {
            JSONObject job2 = job1.getJSONObject("owner");
            values.put(QuestionORM.COLUMN_ID, job1.getString("question_id"));
            values.put(QuestionORM.COLUMN_TITLE,job1.getString("title"));
            values.put(QuestionORM.COLUMN_AUTHOR,job2.getString("display_name"));
            values.put(QuestionORM.COLUMN_VOTES,job1.getString("score"));
        }
    }
    return values;
}

public static boolean isDatabaseOpened() {
    if (myDataBase == null) {
        return false;
    }
    return myDataBase.isOpen();
}

这在另一个活动中是这样使用的:

        QuestionORM.insertQuestion(MainActivity.this,mJSONArr,url);

但是,日志永远不会显示,并且数据库是空的。我的 logcat 中也没有任何错误。

怎么了?我该如何解决这个问题?

谢谢!

【问题讨论】:

  • 你有什么错误吗?
  • 没有。没有我说的错误
  • long questionId = myDataBase.insert(QuestionORM.TABLE_NAME, null, values); null 不是字符串
  • @MurtazaKhursheedHussain 我删除了引号,但问题仍然存在。
  • 有人能解释一下否决票吗?

标签: android json sqlite


【解决方案1】:

你定义了以下方法:

public static boolean isDatabaseOpened() {
    if (myDataBase == null) {
        return false;
    }
    return myDataBase.isOpen();
}

您正在使用myDatabase.isOpen(),根据文档,它返回:

如果数据库当前处于打开状态(尚未关闭),则为真。

但是,您的 insertQuestion() 方法确实会关闭数据库。

[更新]

不要在insertQuestion() 方法结束时关闭数据库。您应该在 onDestroy 方法上执行此操作。以onCreate 方法打开一次,不再需要时关闭。

【讨论】:

  • 是的,但是我在关闭数据库之前调用了这个方法。该方法是检查数据库是否打开。
  • 删除isDatabaseOpened() 检查。为什么数据库会默认打开(即在第一次运行时)?
  • 是的,我以前做过,但遇到了错误。看看这个stackoverflow.com/questions/29961755/…
  • 我尝试了编辑并删除了 close() 函数调用,但我仍然没有在数据库中获取任何数据。
猜你喜欢
  • 2012-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-25
  • 2014-08-25
相关资源
最近更新 更多