Android Asynctask обновление списка просмотра в postexecute - PullRequest
1 голос
/ 23 января 2012

Привет, у меня возникли проблемы с обновлением моего списка после асинхронной операции.
У меня есть простой курсорный адаптер, просмотр списка custon и кнопка.Первоначально, когда приложение запускается, оно устанавливает представление списка из данных, считанных из базы данных.Затем, когда пользователь нажимает кнопку, он запускает асинхронный код для загрузки некоторых данных, которые вставляются в базу данных.Когда запускается асинхронная задача, я отображаю диалоги выполнения, которые я отклоняю в postexecute ().Данные загружаются нормально, но теперь как мне запросить курсор и обновить представление списка в главном потоке после выполнения фонового задания?

Метод «refreshRemoteData» вызывается с помощью кнопки меню.

Вот так выглядит мой AsyncTask.

public class MyActivity extends ListActivity {

  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
  }

  public void onStart() {
    myDBAdapter = new DBAdapter(this);
myDBAdapter.open();
    populateMyList();
  }

  private void populateMyList() {
    myCursor = myDBAdapter.fetchAllItems();
    startManagingCursor(myCursor); 

    getListView().setAdapter(myDBAdapter);        
  }

  private void refreshRemoteData() {
    mPleaseWaitDialog = ProgressDialog.show(ExpirationDateTrackingActivity.this,
    "Data", "Downloading data", true, true);

download_task = new InfoDownloaderTask();
download_task.execute();
 }

  private class InfoDownloaderTask extends AsyncTask<Object, String, Boolean> {
private static final String DEBUG_TAG = "InfoDownloaderTask";

    protected DBAdapter mylocalDBAdapter=null; 

    @Override
    protected void onPreExecute() {
  Log.e(DEBUG_TAG, "onPreExecute: ");
      mylocalDBAdapter = new DBAdapter(this);
  mylocalDBAdapter.open();
    }

    @Override
    protected void onPostExecute(Boolean result) {
      Log.i(DEBUG_TAG, "onPostExecute: " ); 
      mPleaseWaitDialog.dismiss();
      mlocalDBAdapter.close();
    }

    @Override
     protected Boolean doInBackground(Object... arg0) {
        Log.v(DEBUG_TAG, "doInBackground");
        ///...
        //Update the database 
        mylocalDBAdapter.insertData(....);
        return true;
    }
 } //AsyncTask
}

Я не вижу, чтобы мой просмотр списка обновлялся новыми данными списка сразу после завершения асинхронной операции.Но если я вызову другую активность и вернусь к списку, то увижу все новые элементы (обновление списка).

Чего мне не хватает?

1 Ответ

1 голос
/ 23 января 2012

Вы вставляете данные через mylocalDBAdapter, но не говорите myDBAdapter об этом. Попробуйте позвонить myDBAdapter.notifyDataSetChanged(); в конце onPostExecute().

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