SimpleAdapter показывает те же данные в цикле - PullRequest
0 голосов
/ 12 сентября 2018

Я добавляю много данных в SQLite, но в моем представлении списка отображаются только последние вставленные данные. все строки имеют одинаковое значение.

    public void onResume() {

        super.onResume();

        db = dbHelper.getWritableDatabase();

        String[] queryColumns = new String[]{"_id", DBHelper.COL_VEHICLE_TYPE, DBHelper.COL_OPTION_NAME,DBHelper.COL_DATE };

        cursor = db.query(DBHelper.TABLE_NAME, queryColumns, null,null,
               null,null,null);

        HashMap<String,String> map = new HashMap<String,String>();

        while(cursor.moveToNext())
        {

            map.put("vehicle_type", cursor.getString(1));
            map.put("date", cursor.getString(3));
            lst_driver.add(map);
        }

        String[] showColumns = new String[]{"vehicle_type", "date"};
        int[] views = new int[] {R.id.ColType, R.id.ColDate};

        adapter = new SimpleAdapter(DriverActivity.this,lst_driver, R.layout.activity_list_layout, showColumns, views);
        lv_driver.setAdapter(adapter);
}

когда я запускаю это приложение, оно показывает последние DBHelper.COL_VEHICLE_TYPE и DBHelper.COL_DATE после того, как я вставляю в SQLi вот так.

0
 9-12-2018 
0
 9-12-2018 
0
 9-12-2018 
0
 9-12-2018 

Я не использую функцию обновления таблицы в своем коде. Он должен показать все данные из SQLite, которые не совпадают значения. Как мне это исправить?

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Ваша проблема связана с этим фрагментом. Проблема в том, что map всегда один и тот же экземпляр карты , и вы просто изменяете то, что он содержит.

HashMap<String,String> map = new HashMap<String,String>();

while(cursor.moveToNext())
{

    map.put("vehicle_type", cursor.getString(1));
    map.put("date", cursor.getString(3));
    lst_driver.add(map);
}

Легким решением было бы использовать новую карту каждый раз:

while(cursor.moveToNext())
{
    HashMap<String,String> map = new HashMap<String,String>();
    map.put("vehicle_type", cursor.getString(1));
    map.put("date", cursor.getString(3));
    lst_driver.add(map);
}

Перемещая объявление и инициализацию map внутри цикла while, вы гарантируете, что на каждой итерации цикла используется отдельный экземпляр Map.

0 голосов
/ 12 сентября 2018

попробуйте это:

HashMap<String,String> map;
while(cursor.moveToNext())
        {
            map = new HashMap<String,String>();
            map.put("vehicle_type", cursor.getString(1));
            map.put("date", cursor.getString(3));
            lst_driver.add(map);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...