2016-03-21 2 views
0

私はネットワークコールを行っています。ネットワークコールが情報を取得したら、notifyDataSetChangedを呼び出したいと思います。これはすべて同じスレッド上にある場合に機能しますが、別のスレッドで更新が行われている場合は、リストを更新するにはどうすればよいですか?別のスレッドのコールバック内のArrayAdapterでnotifyDataSetChangedをどのようにしますか? - Android

**

それは、このエラーがスローされます。

android.view.ViewRootImpl$CalledFromWrongThreadException: 
Only the original thread that created a view hierarchy can touch its views. 
+0

'放送Receiver'が –

+1

いただきましnotifyDataSetChanged'上の'の呼び出しに問題を使用UIスレッド? – pskink

+0

私はあなたのコードを持っていれば、私はより良いお手伝いをすることができます。あなたは2つの方法があります。最初はbroadcastReceiverを使用し、2番目はネットワークメソッドでインターフェイスを使用します。 –

答えて

1

あなたはハンドラを使用する必要があります。 アダプターをクラスの属性のように宣言します(メソッドの外側)。 そして、あなたの活動にこのコードを使用します。

public Handler updateAdapter = new Handler(new Handler.Callback() { 
    @Override 
    public boolean handleMessage(Message msg) 
    { 
     //Update code 
    } 
}); 

そして、あなたのスレッドで、この1(ハンドラを呼び出すために):

updateCode.sendEmptyMessage(0); 
+0

美しい、これは私が探していたものです。 –

1

をあなたが別のスレッドで、あなたのネットワーク操作を実行するためにAsyncTaskを使用することができます。 UIスレッドからAsyncTaskを開始すると、タスク自体は別のスレッドで実行されます。 AsyncTaskが完了すると、AsyncTaskのonPostExecuteメソッドが再度UIスレッド上で実行され、notifyDataSetChanged()メソッドを呼び出すことができます。

Here's some useful info on AsyncTask in the Android developer docs

関連する問題