2017-02-08 3 views
0

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

Одна вещь, которую я хочу добавить, это то, что я также связал этот список с Parse для получения данных в Интернете и сохранил его в моей базе данных для автономной доступности.

Список обновляется отлично, когда он извлекает данные из Parse.

public void listUpdater() { 

    Cursor c = myDB.rawQuery("SELECT * FROM user", null); 

    int titleIndex = c.getColumnIndex("title"); 

    titles.clear(); 

    if (c.moveToFirst()){ 

     do { 

      Log.i("RESULT: ",c.getString(titleIndex)); 

      titles.add(c.getString(titleIndex)); 




     } while (c.moveToNext()); 


     adapter.notifyDataSetChanged(); 


    } 

} 

Вот вызов метода для данных

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_logged_in); 


     myDB = openOrCreateDatabase("Users", MODE_PRIVATE, null); 
     myDB.execSQL("CREATE TABLE IF NOT EXISTS user(title VARCHAR)"); 

     adapter = new ArrayAdapter(this, android.R.layout.simple_expandable_list_item_1, titles); 

     listView = (ListView) findViewById(R.id.listUsers); 
     listView.setAdapter(adapter); 


     listUpdater(); 

     titles.clear(); 

// After this the list is updated from Parse 

} 

ответ

0

Я рекомендую использовать AsyncTask для этой проблемы. Извлеките данные из своей базы данных в doInBackground() и обновите UI/список в onPostExecute().

Для получения дополнительной информации или примеров проверить this

+0

Большое спасибо. Это решило мои проблемы. Но почему он не назвал мой метод должным образом? –

+0

Я думаю, что это потому, что 'onCreate()'. Пользовательский интерфейс не создавался в то время, когда вы хотели обновить интерфейс. Поэтому сначала создайте пользовательский интерфейс, затем извлеките данные (асинхронно, чтобы не было замораживания -> вы можете показать диалоговое окно загрузки или что-то в этом роде), а затем обновить UI;) – beeb

0

в первую очередь .. почему бы вам необходимо установить адаптер, прежде чем извлечь данные. Вы могли бы сделать что-то подобное.

  1. показать диалоговое окно загрузки.
  2. извлечение данных из db или онлайн/json
  3. разобрать его.
  4. Инициализировать адаптер
  5. установить адаптер на вид.
  6. в случае, если вам необходимо обновить список. сделать notifyItemChanged (fromPos, list.size());

надежда, что помогает

+0

Я хочу добавить свои данные в офлайн-режиме, так что, когда интернет-соединение не доступные пользователи могут просматривать свои ранее загруженные данные. Скажите мне, есть ли в этом случае обходной путь для этого. Спасибо –

+0

Да .. вы можете это сделать. В этом случае используйте asynctask, если вы хотите предоставить пользователю свободу делать то, что они хотят, пока вы готовите свои данные. –