сохранить данные в SQLite из объекта json, используя Hashmap в Android - PullRequest
0 голосов
/ 09 июня 2011

Привет Всем, я новичок в Android, мне нужно проанализировать объект json и отобразить его в listView и одновременно сохранить эти данные в 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); 

и код класса базы данных:

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);

    }

Любая помощь будет по достоинству оценена, СПАСИБО МНОГО

Ответы [ 3 ]

0 голосов
/ 09 июня 2011

эта строка неверна

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

попробовать

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

если вы поймали исключение здесь

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

тогда вы должны предоставить log из logcat для получения дополнительной информации

0 голосов
/ 17 декабря 2015

редактировать эту строку

db.insert ("Баранзан", DatabaseHelper.COUNTRY, cv);

до

db.insert ("mytable", null, cv);

0 голосов
/ 09 июня 2011

Я не уверен, что вы делаете неправильно, но я могу помочь вам с некоторой отладкой.

Во-первых, где вы объявляете свою таблицу?Это согласуется с вашими попытками вставить данные?

В цикле for, где вы создаете ContentValue и вставку вызова, попробуйте посмотреть, что возвращает целочисленная вставка, это номер строки или ID, который не запоминается.Но это -1, если не вставлено.Если вы это понимаете, проблема, скорее всего, в типе проблем.Попытка сохранить строку как int или ...?

Еще одним замечательным инструментом, который вы можете использовать, является команда sqlite3 для проверки структуры базы данных и таблиц.Sqlite3 не установлен на устройстве Android, поэтому используйте для этого эмулятор или прочтите, как запустить его на устройстве: как установить sqlite3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...