【问题标题】:How to store all JSON records into SQLite如何将所有 JSON 记录存储到 SQLite
【发布时间】:2015-04-27 06:16:00
【问题描述】:

我正在解析 JSON 并尝试将该 JSON 数据存储到 SQLite 数据库中,我的 JSON 中只有 name 属性并且有大约 15 条记录,但我无法将所有记录存储到 SQLite - 仍然只存储最后解析成 JSON 的记录。

这是我的 JSON 的样子:

{
  "actors": [
    {
      "name": "Name 1"
    },
    {
      "name": "Name 2"
    },
    {
      "name": "Name 3"
    },
    .......
    {
      "name": "Name 15"
    }
  ]
}

我如何将所有记录存储到 JSON 中? 正如您在我的 JSON 中看到的那样,我有 15 条记录,但在 SQLite 中,我只获取最后一条 JSON 记录的数据(即 - 名称 15)

@Override
protected Boolean doInBackground(String... urls) {
    try {

        //------------------>>
        HttpGet httppost = new HttpGet(urls[0]);
        HttpClient httpclient = new DefaultHttpClient();
        HttpResponse response = httpclient.execute(httppost);

        // StatusLine stat = response.getStatusLine();
        int status = response.getStatusLine().getStatusCode();

        if (status == 200) {
            HttpEntity entity = response.getEntity();
            String data = EntityUtils.toString(entity);


            JSONObject jsono = new JSONObject(data);
            JSONArray jarray = jsono.getJSONArray("actors");

            for (int i = 0; i < jarray.length(); i++) {
                JSONObject object = jarray.getJSONObject(i);

                Actors actor = new Actors();

                actor.setName(object.getString("name"));                        

                actorsList.add(actor);                      

                sqliteDB.open();

                sqliteDB.deleteAll();                                           

                sqliteDB.insert(object.getString("name"));

                sqliteDB.close();
            }
            return true;
        }

        //------------------>>

    } catch (ParseException e1) {
        e1.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return false;
}

【问题讨论】:

  • 你为什么在循环中调用它 sqliteDB.deleteAll(); ?
  • 如果我没记错的话,你在插入项目后删除记录当你调用 sqliteDB.deleteAll();
  • 等一下,让我检查一下.. @SyedRazaMehdi
  • 使用我发布的代码希望这是你做的错误,我更喜欢你不要在循环中打开和关闭数据库连接,它必须在外面完成

标签: android json sqlite


【解决方案1】:
@Override
    protected Boolean doInBackground(String... urls) {
        try {

            //------------------>>
            HttpGet httppost = new HttpGet(urls[0]);
            HttpClient httpclient = new DefaultHttpClient();
            HttpResponse response = httpclient.execute(httppost);

            // StatusLine stat = response.getStatusLine();
            int status = response.getStatusLine().getStatusCode();

            if (status == 200) {
                HttpEntity entity = response.getEntity();
                String data = EntityUtils.toString(entity);


                JSONObject jsono = new JSONObject(data);
                JSONArray jarray = jsono.getJSONArray("actors");
                sqliteDB.open(); 
                sqliteDB.deleteAll();  
                for (int i = 0; i < jarray.length(); i++) {
                    JSONObject object = jarray.getJSONObject(i);

                    Actors actor = new Actors();

                    actor.setName(object.getString("name"));                        

                    actorsList.add(actor);                      

                    sqliteDB.insert(object.getString("name"));

                }
                 sqliteDB.close();
                return true;
            }

            //------------------>>

        } catch (ParseException e1) {
            e1.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return false;
    }

【讨论】:

  • 嘿,是的,它已经为我工作了,让我们在 sqliteDB.deleteAll() 之前对你的代码调用 sqliteDB.open() 做一个小改动...
  • 是的,你是对的,错过了那个:P,很高兴为您提供帮助。
【解决方案2】:

在插入记录之前的for循环中,您正在从数据库中删除所有数据,这就是为什么您只获得最后一条记录,请尝试以下代码

sqliteDB.open();
        sqliteDB.deleteAll();  
        for (int i = 0; i < jarray.length(); i++) {
            JSONObject object = jarray.getJSONObject(i);

            Actors actor = new Actors();

            actor.setName(object.getString("name"));                        

            actorsList.add(actor);                      

            sqliteDB.insert(object.getString("name"));

        }
         sqliteDB.close();

【讨论】:

  • 我已将您的答案标记为有用:)
猜你喜欢
  • 1970-01-01
  • 2011-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-12
  • 2011-05-23
相关资源
最近更新 更多