如何从单一的JSON对象解析多个阵列,并将它们存储在Android的SQLite数据库 [英] how to parse multiple arrays from single json object and store them in Sqlite database in android

查看:115
本文介绍了如何从单一的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的是+结果);
    尝试{
         city​​master = result.getJSONArray(cityMasterEntity);
         的for(int i = 0; I< citymaster.length();我++){
              结果= citymaster.getJSONObject(ⅰ);
              values​​City.put(_ ID,I + 1);
              INT cityid1 = result.getInt(CityId);
              values​​City.put(cityid,cityid1);
              字符串cityname1 = result.getString(城市名);
              values​​City.put(城市名,cityname1);
              串createddate1 = result.getString(CreatedDate);
              values​​City.put(createddate,createddate1);
              串isactive1 = result.getString(IsActive);
              values​​City.put(isactive,isactive1);
              INT stateid1 = result.getInt(STATEID);
              values​​City.put(STATEID,stateid1);
              串statename1 = result.getString(Statename的);
              values​​City.put(Statename的statename1);
              串updateddate1 = result.getString(UpdatedDate);
              values​​City.put(updateddate,updateddate1);
              newrummydb.insert(Database.DATABASE_TABLE,空,values​​City);
        }    countrymaster = result.getJSONArray(countryMasterEntity); ///>>>的问题是在这条线
        对于(INT J = 0; J< countrymaster.length(); J ++)
        {
             结果= countrymaster.getJSONObject(J); //该行还
             values​​Country.put(_编号,J + 1);             INT countryid2 = result.getInt(CountryId);
                 values​​Country.put(countryid,countryid2);
             串countryname2 = result.getString(国家或地区名称);
             values​​Country.put(COUNTRYNAME,countryname2);
             串createddate2 = result.getString(CreatedDate);
             values​​Country.put(Ccreateddate,createddate2);
             串isactive2 = result.getString(IsActive);
             values​​Country.put(Cisactive,isactive2);
             串updateddate2 = result.getString(UpdatedDate);
             values​​Country.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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆