【问题标题】:Trying to insert data to database from JSON array尝试将数据从 JSON 数组插入数据库
【发布时间】:2012-12-21 12:50:28
【问题描述】:

这就是我的代码应该如何工作的!

  1. 使用 php 向 mysql 数据库发布一个 http 帖子(在 AyncTask 类中)以获取 json 编码数据。
  2. 从 dbCodeHelper 类中的每一行 1 到 1 获取 json 编码数据(它完成了在 android 设备上处理数据库所需的一切。(插入新行和所有)

第一步完全按照我的缩进进行。问题是,第二步不起作用。我认为 json_data 对象没有被传递给发生插入数据的 dbCodeHelper 类!

下面是对应的代码部分:

//dbConnection class
JSONObject json_data;
dbCodeHelper db = new dbCodeHelper();
try{
    JSONArray jArray = new JSONArray(result);
    for(int i=0;i<jArray.length();i++){
            json_data = jArray.getJSONObject(i);
            Log.i("log_tag","id: "+json_data.getString("facts"));
            db.addAllFacts(json_data);
    }
    Log.i("log_tag","facts: "+json_data.getString("facts"));
}
catch(JSONException e){
        Log.e("log_tag", "Error parsing data "+e.toString());
}

...
//from dbCodeHelper Class
public void addAllFacts(JSONObject json_data)
{
    SQLiteDatabase db = this.getWritableDatabase();

    ContentValues values = new ContentValues();
    try {
        values.put(KEY_SL_NUMBER, json_data.getInt("sl_number"));
        values.put(KEY_NAME, json_data.getString("facts"));

        db.insert(TABLE_NAME, null, values);
        db.close();

    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        Log.i("log_tag","id: "+ "something messed up in the dbcodehlper class(inserting all the data)!!!");
    }

}

//from mainactivity
protected void onResume() {
    super.onResume();
    if (prefs.getBoolean("firstrun", true)) {

        //getDbData(prefs);
        // Do first run stuff here then set 'firstrun' as false
        // using the following line to edit/commit prefs
        prefs.edit().putBoolean("firstrun", false).commit();
    }
    connectionDb cdb = new connectionDb();
    cdb.execute("http://coolfacts.in/app/dbconnectservice.php");
}

【问题讨论】:

  • 您是否尝试过通过 logcat 获取您传递给 addAllFacts(JSONObject) 的 JSON 对象来验证您的假设?出现了什么?
  • Log.i("log_tag","facts: "+json_data.getString("facts"));这准确地显示了它要显示的内容!
  • 如果您可以读取 JSON 数据,您可以尝试做的一件事是将您的 db.insert() 调用更改为 db.insertOrThrow() 并为 SQLExceptions 添加一个 catch 子句,看看为什么它不是进入您的 SQLite 数据库和/或将 long 分配给 db.insert,因为它应该返回新数据库条目的行号。因为如果您可以从函数中看到数据,则很可能是数据库不合作。
  • 我认为我未能将上下文传递给 dbCodeHelper。 dbCodeHelper db = new dbCodeHelper();由于我不在活动课上,因此无法在此处传递上下文! ://
  • 好吧,您可以修改您的应用程序类以允许您将上下文放入您的 DBHelper 类中。 [link]stackoverflow.com/questions/2002288/… 的答案将告诉你如何做到这一点。

标签: java android json sqlite logging


【解决方案1】:

为了在您的 DBHelper 类中传递您的上下文,您可以按照以下网站上列出的答案进行操作:Using Application context everywhere?

【讨论】:

    猜你喜欢
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 2021-05-19
    相关资源
    最近更新 更多