2017-02-21 7 views
0

Я получаю контакты из базы данных с помощью AsyncTask. И хочу показать его в listview. Но я столкнулся с проблемой. Вот код.Пропустить ListView в AsyncTask

public class BackgroundWorker extends AsyncTask<String,Void,String> { 
     private Context context; 
     private ListView listView; 
    BackgroundWorker(Context ctx){ 
    context = ctx; 
    } 
    BackgroundWorker(Context ctx, ListView lv){ 
    context = ctx; 
    listView = lv; 
    } 
    // Other code 
    @Override 
    protected void onPostExecute(String result){ 
    // convert result string in name and phone array and pass to contentAdapet 
    // Content adapter is extended from array adapter and used to display data in listview which is working fine. 
       ContentAdapter contentAdapter = new ContentAdapter(context, names, phones); 
      listView.setAdapter(contentAdapter); 
    } 
// reset of code 
} 

MainActivity

 ListView listView = (ListView) findViewById(R.id.listView); 
      BackgroundWorker backgroundWorker = new BackgroundWorker(this, listView); 
      backgroundWorker.execute("argument"); 

Console Ошибка

E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference 

Эти два класса отличаются Java файл не в одном файле. BackgroundWorker.java и MainActivity.java

+0

set listView как this.listView = lv; в вашем конструкторе и посмотрите, работает ли он. – Chordin4tion

+0

Нет, это не работает, я попробовал –

+0

Почему вы передаете listView в AsyncTask, просто объявите его в своем основном классе и используйте его в onPostExecute(). – Chordin4tion

ответ

0

Я думаю, вы не можете установить представление контента, и оно должно быть перед объектом backgroundWorker. Или проверьте, что в вашем основном действии должен быть список.

setContentView(R.layout.activity_main); 
    ListView listView = (ListView) findViewById(R.id.listView); 
     BackgroundWorker backgroundWorker = new BackgroundWorker(this, listView); 
     backgroundWorker.execute("argument"); 
+0

О, извините, я установил представление содержимого после объекта BackgroundWorker, поэтому они не могут получить listview. благодаря –

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

  • Нет связанных вопросов^_^