2012-01-22 5 views
1

Привет, У меня возникла проблема с обновлением моего списка после операции Async.
У меня есть simplecursoradapter, и custon listview и кнопка. Первоначально, когда приложение запускается, он устанавливает список из данных, считанных из базы данных. Затем, когда пользователь нажимает кнопку, он запускает асинхронный код для загрузки некоторых данных, которые вставляются в базу данных. Когда запускается задача async, я показываю progressdialog, который я увольняю в postexecute(). Данные получаются загруженными в порядке, но теперь как я запрашиваю курсор и список обновлений в основном потоке после выполнения фонового задания?android asynctask update to listview в 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 
} 

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

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

ответ

1

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

+0

Тед, но не существует метода notifyDataSetChanged() для myDBAdapter? – Atarang

+0

Предложение Теда сработало. Но мне пришлось передать listViewAdapter в задачу Async и вызвать listViewAdapter.notifyDataSetChanged() в postExecute(). – Atarang

+0

@Atarang Рад, что у вас это работает. Спасибо за согласие. –

Смежные вопросы