如何从单一的JSON对象解析多个阵列,并将它们存储在Android的SQLite数据库 [英] how to parse multiple arrays from single json object and store them in Sqlite database in android
本文介绍了如何从单一的JSON对象解析多个阵列,并将它们存储在Android的SQLite数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何解析由单一JSON对象多个阵列,并将它们存储在Android的结果SQLite数据库
实际JSON数据
{
cityMasterEntity://// JSON数组1
{
CityId:1,
城市名:艾哈迈达巴德
CreatedDate:\\ /日期(1373091319697 + 0530)\\ /
IsActive:真实,
STATEID:6,
Statename的:古吉拉特邦\\ u000d \\ u000a
UpdatedDate:空
},
{
CityId:3,
城市名:拉杰果德
CreatedDate:\\ /日期(1373091319697 + 0530)\\ /
IsActive:真实,
STATEID:6,
Statename的:古吉拉特邦\\ u000d \\ u000a
UpdatedDate:空
},
{
CityId:2,
城市名:苏拉特
CreatedDate:\\ /日期(1373091319697 + 0530)\\ /
IsActive:真实,
STATEID:6,
Statename的:古吉拉特邦\\ u000d \\ u000a
UpdatedDate:空
}
]
countryMasterEntity://// JSON数组2
{
CountryId:1,///>>我不能够解析,并存储在该数组中的数据库
国家或地区名称:印度,
CreatedDate:\\ /日期(1373091319697 + 0530)\\ /
IsActive:真实,
UpdatedDate:空
}
]
这是我的code其中I M expriencing问题
保护无效onPostExecute(JSONObject的结果){
progressdialog.dismiss();
的System.out.println(JSONObject的是+结果);
尝试{
citymaster = result.getJSONArray(cityMasterEntity);
的for(int i = 0; I< citymaster.length();我++){
结果= citymaster.getJSONObject(ⅰ);
valuesCity.put(_ ID,I + 1);
INT cityid1 = result.getInt(CityId);
valuesCity.put(cityid,cityid1);
字符串cityname1 = result.getString(城市名);
valuesCity.put(城市名,cityname1);
串createddate1 = result.getString(CreatedDate);
valuesCity.put(createddate,createddate1);
串isactive1 = result.getString(IsActive);
valuesCity.put(isactive,isactive1);
INT stateid1 = result.getInt(STATEID);
valuesCity.put(STATEID,stateid1);
串statename1 = result.getString(Statename的);
valuesCity.put(Statename的statename1);
串updateddate1 = result.getString(UpdatedDate);
valuesCity.put(updateddate,updateddate1);
newrummydb.insert(Database.DATABASE_TABLE,空,valuesCity);
} countrymaster = result.getJSONArray(countryMasterEntity); ///>>>的问题是在这条线
对于(INT J = 0; J< countrymaster.length(); J ++)
{
结果= countrymaster.getJSONObject(J); //该行还
valuesCountry.put(_编号,J + 1); INT countryid2 = result.getInt(CountryId);
valuesCountry.put(countryid,countryid2);
串countryname2 = result.getString(国家或地区名称);
valuesCountry.put(COUNTRYNAME,countryname2);
串createddate2 = result.getString(CreatedDate);
valuesCountry.put(Ccreateddate,createddate2);
串isactive2 = result.getString(IsActive);
valuesCountry.put(Cisactive,isactive2);
串updateddate2 = result.getString(UpdatedDate);
valuesCountry.put(Cupdateddate,updateddate2);
newrummydb.insert(Database.DATABASE_TABLE_COUNTRY,空,
}
这是我的logcat
04-17 13:13:59.922:E / SQLiteDatabase(30756):错误插入STATEID = 6 isactive =真_id = 1 Statename的古吉拉特邦=
04-17 13:13:59.922:E / SQLiteDatabase(30756):updateddate = NULL createddate = /日期(1373091319697 + 0530)/城市名=艾哈迈达巴德cityid = 1
04-17 13:13:59.922:E / SQLiteDatabase(30756):android.database.sqlite.SQLiteConstraintException:列_id不唯一(code 19)
04-17 13:13:59.922:E / SQLiteDatabase(30756):在android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(本机方法)
04-17 13:13:59.922:E / SQLiteDatabase(30756):在android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:775)
04-17 13:13:59.922:E / SQLiteDatabase(30756):在android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788)
04-17 13:13:59.922:E / SQLiteDatabase(30756):在android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86)
04-17 13:13:59.922:E / SQLiteDatabase(30756):在android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1469)
04-17 13:13:59.922:E / SQLiteDatabase(30756):在android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339)
04-17 13:13:59.922:E / SQLiteDatabase(30756):在 com.example.newrummyjson.NewRummyActivity $ JSONParsing.onPostExecute(NewRummyActivity.java:201)
04-17 14:38:41.934:E / SQLiteDatabase(21980):在android.os.AsyncTask.finish(AsyncTask.java:631)
04-17 14:38:41.934:E / SQLiteDatabase(21980):在android.os.AsyncTask.access $ 600(AsyncTask.java:177)
04-17 14:38:41.934:E / SQLiteDatabase(21980):在android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:644)
04-17 14:38:41.934:E / SQLiteDatabase(21980):在android.os.Handler.dispatchMessage(Handler.java:99)
04-17 14:38:41.934:E / SQLiteDatabase(21980):在android.os.Looper.loop(Looper.java:137)
04-17 14:38:41.934:E / SQLiteDatabase(21980):在android.app.ActivityThread.main(ActivityThread.java:4745)
04-17 14:38:41.934:E / SQLiteDatabase(21980):在java.lang.reflect.Method.invokeNative(本机方法)
04-17 14:38:41.934:E / SQLiteDatabase(21980):在java.lang.reflect.Method.invoke(Method.java:511)
04-17 14:38:41.934:E / SQLiteDatabase(21980):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:786)
04-17 14:38:41.934:E / SQLiteDatabase(21980):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
04-17 14:38:41.934:E / SQLiteDatabase(21980):在dalvik.system.NativeStart.main(本机方法)
解决方案
继code得到你所导致
JSONParser jParser =新JSONParser();
JSONObject的JSON = jParser.getJSONFromUrl(json_url);
// TODO自动生成方法存根
JSONArray countryMasterEntity = json.getJSONArray(countryMasterEntity); 如果(countryMasterEntity!= NULL)
{
//通过所有联系人循环
的for(int i = 0; I< countryMasterEntity.length();我++){
JSONObject的C = countryMasterEntity.getJSONObject(I)
光标CR = db.rawQuery(从'country`选择*其中`id` ='+ c.getString(ID)+',NULL); 查询字符串=
将纳入国家(ID,COUNTRYNAME,CREATEDATE,isactive)+
价值观(+
c.getString(ID)+,'+
c.getString(COUNTRYNAME)+','+
c.getString(CREATEDATE)+','+
c.getString(isactive)
+');
db.execSQL(查询);
Log.d(插入,查询); cr.close();
}
}
how to parse multiple arrays from single json object and store them in Sqlite database in android
Actual JSOn data
{
"cityMasterEntity": [//// JSon array 1
{
"CityId": 1,
"CityName": "Ahmedabad",
"CreatedDate": "\/Date(1373091319697+0530)\/",
"IsActive": true,
"StateId": 6,
"StateName": "Gujarat\u000d\u000a",
"UpdatedDate": null
},
{
"CityId": 3,
"CityName": "Rajkot",
"CreatedDate": "\/Date(1373091319697+0530)\/",
"IsActive": true,
"StateId": 6,
"StateName": "Gujarat\u000d\u000a",
"UpdatedDate": null
},
{
"CityId": 2,
"CityName": "Surat",
"CreatedDate": "\/Date(1373091319697+0530)\/",
"IsActive": true,
"StateId": 6,
"StateName": "Gujarat\u000d\u000a",
"UpdatedDate": null
}
],
"countryMasterEntity": [ ////Json Array 2
{
"CountryId": 1, ///>> i am not able parse and store this array in database
"CountryName": "India",
"CreatedDate": "\/Date(1373091319697+0530)\/",
"IsActive": true,
"UpdatedDate": null
}
],
This my code where i m expriencing problem
protected void onPostExecute(JSONObject result) {
progressdialog.dismiss();
System.out.println("JSONObject is"+result);
try {
citymaster = result.getJSONArray("cityMasterEntity");
for(int i=0;i<citymaster.length();i++) {
result =citymaster.getJSONObject(i);
valuesCity.put("_id", i + 1);
int cityid1 = result.getInt("CityId");
valuesCity.put("cityid", cityid1);
String cityname1 = result.getString("CityName");
valuesCity.put("cityname", cityname1);
String createddate1 = result.getString("CreatedDate");
valuesCity.put("createddate", createddate1);
String isactive1 = result.getString("IsActive");
valuesCity.put("isactive", isactive1);
int stateid1 = result.getInt("StateId");
valuesCity.put("stateid", stateid1);
String statename1 = result.getString("StateName");
valuesCity.put("statename", statename1);
String updateddate1 = result.getString("UpdatedDate");
valuesCity.put("updateddate", updateddate1);
newrummydb.insert(Database.DATABASE_TABLE, null, valuesCity);
}
countrymaster=result.getJSONArray("countryMasterEntity");/// >>>problem is in this line
for (int j=0;j<countrymaster.length();j++)
{
result =countrymaster.getJSONObject(j);// This line also
valuesCountry.put("_id", j + 1);
int countryid2 = result.getInt("CountryId");
valuesCountry.put(countryid, countryid2);
String countryname2 = result.getString("CountryName");
valuesCountry.put(countryname, countryname2);
String createddate2 = result.getString("CreatedDate");
valuesCountry.put(Ccreateddate, createddate2);
String isactive2 = result.getString("IsActive");
valuesCountry.put(Cisactive, isactive2);
String updateddate2 = result.getString("UpdatedDate");
valuesCountry.put(Cupdateddate, updateddate2);
newrummydb.insert(Database.DATABASE_TABLE_COUNTRY, null,
}
This my logcat
04-17 13:13:59.922: E/SQLiteDatabase(30756): Error inserting stateid=6 isactive=true _id=1 statename=Gujarat
04-17 13:13:59.922: E/SQLiteDatabase(30756): updateddate=null createddate=/Date(1373091319697+0530)/ cityname=Ahmedabad cityid=1
04-17 13:13:59.922: E/SQLiteDatabase(30756): android.database.sqlite.SQLiteConstraintException: column _id is not unique (code 19)
04-17 13:13:59.922: E/SQLiteDatabase(30756): at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
04-17 13:13:59.922: E/SQLiteDatabase(30756): at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:775)
04-17 13:13:59.922: E/SQLiteDatabase(30756): at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788)
04-17 13:13:59.922: E/SQLiteDatabase(30756): at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86)
04-17 13:13:59.922: E/SQLiteDatabase(30756): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1469)
04-17 13:13:59.922: E/SQLiteDatabase(30756): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339)
04-17 13:13:59.922: E/SQLiteDatabase(30756): at
com.example.newrummyjson.NewRummyActivity$JSONParsing.onPostExecute(NewRummyActivity.java:201)
04-17 14:38:41.934: E/SQLiteDatabase(21980): at android.os.AsyncTask.finish(AsyncTask.java:631)
04-17 14:38:41.934: E/SQLiteDatabase(21980): at android.os.AsyncTask.access$600(AsyncTask.java:177)
04-17 14:38:41.934: E/SQLiteDatabase(21980): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
04-17 14:38:41.934: E/SQLiteDatabase(21980): at android.os.Handler.dispatchMessage(Handler.java:99)
04-17 14:38:41.934: E/SQLiteDatabase(21980): at android.os.Looper.loop(Looper.java:137)
04-17 14:38:41.934: E/SQLiteDatabase(21980): at android.app.ActivityThread.main(ActivityThread.java:4745)
04-17 14:38:41.934: E/SQLiteDatabase(21980): at java.lang.reflect.Method.invokeNative(Native Method)
04-17 14:38:41.934: E/SQLiteDatabase(21980): at java.lang.reflect.Method.invoke(Method.java:511)
04-17 14:38:41.934: E/SQLiteDatabase(21980): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
04-17 14:38:41.934: E/SQLiteDatabase(21980): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
04-17 14:38:41.934: E/SQLiteDatabase(21980): at dalvik.system.NativeStart.main(Native Method)
解决方案
Following code get you result
JSONParser jParser = new JSONParser();
JSONObject json = jParser.getJSONFromUrl(json_url);
// TODO Auto-generated method stub
JSONArray countryMasterEntity= json.getJSONArray("countryMasterEntity");
if(countryMasterEntity!=null)
{
// looping through All Contacts
for(int i = 0; i < countryMasterEntity.length(); i++){
JSONObject c = countryMasterEntity.getJSONObject(i);
Cursor cr = db.rawQuery("select * from `country` where `id`='"+c.getString("id")+"'",null);
String query=
"Insert into country(id,countryname,createdate,isactive)"+
"values("+
c.getString("id")+",'"+
c.getString("countryname")+"','"+
c.getString("createdate")+"','"+
c.getString("isactive")
+"')";
db.execSQL(query);
Log.d("Insert", query);
cr.close();
}
}
这篇关于如何从单一的JSON对象解析多个阵列,并将它们存储在Android的SQLite数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文