在Android中使用Hashmap将数据保存到json对象的SQLite
大家好我是Android新手,我需要解析json对象并将它显示在listView中,同时将这些数据保存在SQLite中,但是每当我运行项目异常被捕获......数据库被创建时没有任何数据或值。在Android中使用Hashmap将数据保存到json对象的SQLite
这里是由我试图代码:
Bundle bundle = getIntent().getExtras();
String rfiItems = bundle.getString("allData");
final ArrayList<HashMap<String, String>> mylist4 = new ArrayList<HashMap<String, String>>();
try{
JSONObject jObj = new JSONObject(rfiItems);
JSONArray data4 = jObj.getJSONArray("data");
//data4 = json4.getJSONArray("data");
//Toast.makeText(getApplicationContext(), data4.toString(), Toast.LENGTH_LONG).show();
for(int i=0;i<data4.length();i++){
HashMap<String, String> map = new HashMap<String, String>();
JSONObject e = data4.getJSONObject(i);
map.put("id", String.valueOf(i));
map.put("rfi_data1", "" + e.getString("country"));
map.put("rfi_data4", "" + e.getString("state"));
map.put("rfi_data5", "" + e.getString("city"));
map.put("rfi_data6", "" + e.getString("name"));
map.put("rfi_data7", "" + e.getString("about"));
DatabaseHelper databaseHelper = new DatabaseHelper(this);
SQLiteDatabase db = databaseHelper.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(DatabaseHelper.COUNTRY, e.getString("country"));
cv.put(DatabaseHelper.CITY, e.getString("state"));
cv.put(DatabaseHelper.STATE, e.getString("city"));
cv.put(DatabaseHelper.NAME, e.getString("name"));
cv.put(DatabaseHelper.ABOUT, e.getString("about"));
db.insert("Baranzan", DatabaseHelper.COUNTRY, cv);
db.close();
mylist4.add(map);
}
}catch(JSONException e) {
Log.e("log_tag", "Error parsing data "+e.toString());
}
ListAdapter adapter4 = new SimpleAdapter(this, mylist4 , R.layout.item_list4,
new String[] { "rfi_data1", "rfi_data4","rfi_data5","rfi_data6","rfi_data7"},
new int[] { R.id.rfi_item_type, R.id.rfi_status,R.id.rfi_title,R.id.rfi_change_date,R.id.rfi_responded_date });
setListAdapter(adapter4);
和databaseclass代码:
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "myonlydb.db";
public static final String ID = "id";
public static final String COUNTRY = "country";
public static final String STATE = "state";
public static final String CITY = "city";
public static final String NAME = "name";
public static final String ABOUT = "about";
public static final String TAG = "Form"; // optional
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, 1);
}
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE mytable (_id INTEGER PRIMARY KEY AUTOINCREMENT, country TEXT, state TEXT, city TEXT, name TEXT, about TEXT,);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
android.util.Log.v("mytable", "Upgrating database will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS mytable");
onCreate(db);
}
任何帮助将真正理解,非常感谢
我不是确定你做错了什么,但我可以帮你做一些调试。
首先你在哪里申报你的餐桌?这与试图插入的数据一致吗?
在您创建ContentValue和调用插入的for循环中,尝试查看返回哪个整数插入,这是行号或ID不记得。但是,如果没有插入,则为-1。如果你得到这个问题可能是某种类型的问题。尝试将字符串保存为int或...?
您可以使用的另一个很棒的工具是sqlite3命令来检查数据库结构和表。该sqlite3的未安装在Android设备上,所以使用模拟器对于这一点,或者阅读有关如何让它在设备上运行: How to install sqlite3
此行是错误的
db.insert("Baranzan", DatabaseHelper.COUNTRY, cv);
尝试
db.insert(DatabaseHelper.COUNTRY, null, cv);
,如果你捕获的异常这里
catch(JSONException e) {
Log.e("log_tag", "Error parsing data "+e.toString());
}
,那么你应该了解更多信息
编辑这一行
db.insert( “Baranzan”,DatabaseHelper.COUNTRY,CV)提供日志从logcat的;
到
db.insert( “MYTABLE”,NULL,CV);
看起来有点像由Selvin提供的4年前的答案,不是吗? – SaeX 2015-12-17 09:12:51
你好,请你给我上面的源代码我面临同样的问题,请发邮件到我的邮箱ID [email protected] – 2012-11-22 03:35:01