2017-10-06 1 views
0

私はsqliteのデータを持ってきて、断片化されたリストビューでそれらを表示するアプリケーションを持っています。これを行うにはasynctaskを使用します。 nullオブジェクト参照に仮想メソッド「空android.widget.ListView.setAdapter(android.widget.ListAdapter)」を起動しようとしています。私は、アプリケーションを実行すると、私はListViewがAsyncTaskで初期化されない

のjava.lang.NullPointerExceptionエラーを起動します。

どうしてですか?

断片

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.fragment_frm_lst_cobertura, container, false); 
} 

AsyncTask

public class BckListCobertura extends AsyncTask<String, Fila_Lista_cobertura, String> { 
ActivityMenu activity; 
ListView listViewCobertura; 

public BckListCobertura(ActivityMenu activity) { 
    this.activity = activity; 
    this.delegate = activity; 
} 
@Override 
protected String doInBackground(String... params) { 
fila_lista_cobertura_adapter = new Fila_Lista_cobertura_adapter(activity, R.layout.row_lst_cobertura, colorlista); 
     listViewCobertura = (ListView) activity.findViewById(R.id.lstvCobertura); 
} 
@Override 
protected void onPostExecute(String result) { 
     listViewCobertura.setAdapter(fila_lista_cobertura_adapter); 
delegate.processFinishListCobertura(result); 
} 
+0

doInBackgroundメソッドでUI部分を実行することはできません。このIDをonCreateViewメソッドで探し、試してみる必要があります。 –

答えて

2

私はWH、あなたがListViewを初期化しているという問題があると考えていますichはUIコンポーネントで、UIスレッドではありません。

Androidでは、UIに関連するすべてのことをメインスレッドで行う必要があります。

あなたのコンポーネントがFragmentである場合にはそのonCreateView()方法では、彼らのonCreate()方法で各Activity自身のコンポーネントを初期化、またはすることをお勧めします。

AsyncTask内の要素を実際に初期化する場合は、documentationに従ってメインスレッドで実行されるonPreExecute()メソッドをオーバーライドできます。

まだ、私はどれだけ良い習慣があるのか​​分かりません。

+0

あなたの迅速な返信をありがとう、私はこのアンドロイドには新しく、oncreateでlistviewをどのように初期化し、asynctaskからアダプタにデータを追加できるか教えてください。 –

+0

デバッグで動作するのはなぜですか? –

+0

私はそれを解決することができました、onPostExecuteのリストビューを初期化してください –

関連する問題