【问题标题】:json data get only the last valuejson数据只获取最后一个值
【发布时间】:2014-08-26 21:42:41
【问题描述】:

我正在尝试获取 JSON 数据并将这些数据插入 SQLite 数据库。 JSON url中有很多数据。但是,我的应用只获得最后一个值。

这是我获取 JSON 数据的代码

protected ArrayList<HashMap<String, String>> doInBackground(Void... voids) {

            ServiceHandler sh = new ServiceHandler();
            String jsonStr = sh.makeServiceCall(url, ServiceHandler.GET);
            Log.d("Response: ", "> " + jsonStr);

            if (jsonStr != null) {
                try {
                    JSONObject jsonObject = new JSONObject(jsonStr);
                    restaurants = jsonObject.getJSONArray(TAG_RESTAURANTS);

                    for (int i = 0; i < restaurants.length(); i++) {
                        JSONObject c = restaurants.getJSONObject(i);
                        JSONObject restaurant = c.getJSONObject("Restaurant");
                        id = restaurant.getString("id");
                        name = restaurant.getString("name");
                        image = restaurant.getString("image");
                        description = restaurant.getString("description");
                        address = restaurant.getString("address");
                        phone = restaurant.getString("phone");


                        //Inserting json data into SQLite db
                        db.insertIntoRestaurantsTable(id,name,image,description,address,phone);
                        Log.d("Insert:", "Inserting....");


                        HashMap<String, String> jsonRestaurantData = new HashMap<String, String>();
                        jsonRestaurantData.put("id", id);
                        jsonRestaurantData.put("name", name);
                        jsonRestaurantData.put("image", image);
                        jsonRestaurantData.put("description", description);
                        jsonRestaurantData.put("address", address);
                        jsonRestaurantData.put("phone", phone);

                        arraylist.add(jsonRestaurantData);

                        return arraylist;



                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            return null;
        }

这是我的 JSON 示例

{
restaurants: [
{
Restaurant: {
id: "5",
name: "Dummy Name 5",
image: "443366291404304960DSCF6532.JPG",
description: "Dummy Description 5",
address: "Dummy Address 5",
phone: "1234"
}
},
{
Restaurant: {
id: "4",
name: "Dummy Name 4",
image: "867352851406598423IMG_0433.JPG",
description: "Dummy Description 4",
address: "Dummy Description 4",
phone: "01111222"
}
},
{
Restaurant: {
id: "3",
name: "Dummy Name 3",
image: "6065339moon.jpg",
description: "Dummy description 3",
address: "Dummy Description 3",
phone: "092131232"
}
},

调试后,只有以下最新的数据插入到 SQLite 中。其他的都剩下了。

Restaurant: {
 id: "5",
 name: "Dummy Name 5",
 image: "443366291404304960DSCF6532.JPG",
 description: "Dummy Description 5",
 address: "Dummy Address 5",
 phone: "1234"
 }
},

我的循环获取 JSON 数据有问题?? 请帮帮我。

这是我的数据库代码。

public void insertIntoRestaurantsTable(String restaurant_id, String name, String image, String description, String address, String phone )
    {

        SQLiteDatabase db = this.getWritableDatabase();

        insertValues.put("_id",restaurant_id);
        insertValues.put("_name",name);
        insertValues.put("_image",image);
        insertValues.put("_description",description);
        insertValues.put("_address",address);
        insertValues.put("_phone", phone);

        db.insert(RESTAURANT_TABLE_NAME, null, insertValues);

    }

【问题讨论】:

  • 请显示db.insertIntoRestaurantTable() 的代码。您似乎每次插入时都会覆盖该条目,而不是创建一个新条目。
  • 用 insertIntoRestaurantTable() 更新
  • 问题出在别处。看我的回答。

标签: android json sqlite


【解决方案1】:

忘记我的评论。您的问题是 return 语句在 for 循环内而不是在它之外。所以在第一次迭代之后,该方法将返回。你没有得到最后一个元素,而是第一个元素。 而不是这个:

         for(){
                try{
                    ...
                    arraylist.add(jsonRestaurantData);

                    return arraylist;

                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
          }

你需要这样做:

         for(){
                try{
                    ...
                    arraylist.add(jsonRestaurantData);

                }

            } catch (JSONException e) {
                e.printStackTrace();
            }
           }
           return arraylist;

【讨论】:

  • 非常感谢。现在已修复。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-18
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
  • 2021-03-14
  • 1970-01-01
  • 2021-11-13
相关资源
最近更新 更多