java将JSON保存到Sqlite并显示它
我已经使用JSONObject成功地从外部数据库访问了数据,但我的问题是我要将其保存到sqlite数据库。在检索数据时,我只从sqlite获取了最后一行。主要问题是从sqlite而不是JSON获取数据,可能是我在分配或检索时出错了。。这里没有任何状态。。谢谢
添加SQLITE代码之前的代码:
// Storing each json item in variable
String id = c.getString(TAG_PID);
String name = c.getString(TAG_NAME);
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put(TAG_PID, id);
map.put(TAG_NAME, name);
// adding HashList to ArrayList
productsList.add(map);
添加到SQlite:
{ // products found
// Getting Array of Products
products = json.getJSONArray(TAG_PRODUCTS);
// looping through All Products
for (int i = 0; i < products.length(); i++) {
//individually get each arrays
JSONObject c = products.getJSONObject(i);
// Storing each json item in variable
String id = c.getString(TAG_PID);
String name = c.getString(TAG_NAME);
//code to add each retrieved data from JSONArray to Sqlite
db.addContact(new Menu(id.toString(), name.toString()));
}
// Reading all contacts
Log.d("Reading: ", "Reading all contacts..");
List<Menu> contacts = db.getAllContacts();
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
for (Menu cn : contacts) {
// Writing Contacts to log
// adding each child node to HashMap key => value
map.put(TAG_PID, cn.getID().toString());
map.put(TAG_NAME,cn.getName().toString());
// adding HashList to ArrayList
productsList.add(map);
}
该计划的另一部分:
ListAdapter adapter = new SimpleAdapter(
Main_Activity.this, productsList,
R.layout.activity_view_products, new String[] { TAG_PID,
TAG_NAME},
new int[] { R.id.pid, R.id.name });
// updating listview
setListAdapter(adapter);
另一个代码:
// Adding new contact
void addContact(Menu contact) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_ID, contact.getID()); // Contact Name
values.put(KEY_NAME, contact.getName()); // Contact Phone
// Inserting Row
db.insert(TABLE_CONTACTS, null, values);
db.close(); // Closing database connection
}
// Getting All Contacts
public List<Menu> getAllContacts() {
List<Menu> contactList = new ArrayList<Menu>();
// Select All Query
String selectQuery = "SELECT * FROM " + TABLE_CONTACTS;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
Menu contact = new Menu();
contact.setID((cursor.getString(0).toString()));
contact.setName(cursor.getString(1).toString());
Log.d("Menu: ", contact.getID().toString());
// Adding contact to list
contactList.add(contact);
} while (cursor.moveToNext());
}
// return contact list
return contactList;
}
# 1 楼答案
因为这个
您正在使用相同的
PID
和NAME
键插入映射中的所有记录。因此,每次向映射添加新条目时,每个记录都会被覆盖。因此,您只能看到地图中的最后一条记录相反,将
PID
作为键,将NAME
作为值(假设ID是唯一的),否则,您可以简单地使用对象的ArrayList,而不是将其转换为映射除此之外,您还需要执行以下操作:-
更新:- 看到你的要求后,我想这就是你需要做的