2011-06-09 76 views
0

大家好我是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); 

    } 

任何幫助將真正理解,非常感謝

+0

你好,請你給我上面的源代碼我面臨同樣的問題,請發郵件到我的郵箱ID [email protected] – 2012-11-22 03:35:01

回答

0

我不是確定你做錯了什麼,但我可以幫你做一些調試。

首先你在哪裏申報你的餐桌?這與試圖插入的數據一致嗎?

在您創建ContentValue和調用插入的for循環中,嘗試查看返回哪個整數插入,這是行號或ID不記得。但是,如果沒有插入,則爲-1。如果你得到這個問題可能是某種類型的問題。嘗試將字符串保存爲int或...?

您可以使用的另一個很棒的工具是sqlite3命令來檢查數據庫結構和表。該sqlite3的未安裝在Android設備上,所以使用模擬器對於這一點,或者閱讀有關如何讓它在設備上運行: How to install sqlite3

0

此行是錯誤的

db.insert("Baranzan", DatabaseHelper.COUNTRY, cv); 

嘗試

db.insert(DatabaseHelper.COUNTRY, null, cv); 

,如果你捕獲的異常這裏

catch(JSONException e)  { 
        Log.e("log_tag", "Error parsing data "+e.toString()); 
       } 

,那麼你應該瞭解更多信息

0

編輯這一行

db.insert( 「Baranzan」,DatabaseHelper.COUNTRY,CV)提供日誌從logcat的;

db.insert( 「MYTABLE」,NULL,CV);

+0

看起來有點像由Selvin提供的4年前的答案,不是嗎? – SaeX 2015-12-17 09:12:51

相關問題