2012-01-14 8 views
1

doinbackgroundに「Scores Activity」を送信してから、スコアアクティビティで関数を実行しましたが、 「ビュー階層を作成した元のスレッドのみがそのビューにアクセスできます。 on "birinci.setText(txt);"ライン。Android Context doInBackgroundを渡す

私がここで紛失しているのは、同じコンテキストを使用していますか?

Scores Activity 
{ 
Object[] stuff = {this.dhn, Scores.this}; 
ConnectXML runXML = new ConnectXML(); 
runXML.execute(stuff); 
} 

public void setScoreListUpdate(String txt) 
{ 
birinci.setText(txt); 
} 



private Scores myScores; 
protected String doInBackground(Object... arguments) { 

myScores = (Scores)stuff[1]; 
myScores.setScoreListUpdate(result); 

} 

答えて

1

は、エラーメッセージは、すでに答えを与える:あなたが触れることができないそれらを作成していないスレッドから任意のビュー(編集/変更/更新の/ etc。)。 AsyncTaskのdoInBackgrund(...)で実行されるものは、別のスレッドによって実行されるため、そこで直接表示操作を行うことはできません。

解決策は非常に簡単です。必要に応じて、AsyncTaskが提供する他のメソッドをオーバーライドします。すべての作業が完了した後にビューを更新しようとしている場合は、単にonPostExecute(...)を上書きします。作業がバックグラウンドで行われている間に何らかの進捗状況を示す場合は、onProgressUpdate(...)を使用してください。そこのすべてがメインUIスレッド(すべてのビューを作成した)によって実行されています。

documentation on AsyncTaskを読んでください。これは、さまざまなステップと可能性をはっきりと記述しているためです。

+0

私の間違い!私はmyScores.setScoreListUpdate(結果)を入れた。ポスト実行時に これは正常に動作しました。ご協力いただきありがとうございます – Mert

関連する問題