したがって、起動するAsyncTaskと、メソッドの呼び出し中にクラッシュしgetXmlFromUrlます。解決策が見つかりません。誰か助けてもらえますか? 私は 1 時間ほど試行錯誤しています... 不足しているcatchブロックがあると表示されますが、どこでしょうか? アプリにコメントするとgetXmlFromUrl、アプリは正常に動作します。私は終わったので、どんな助けでも大丈夫です:)
5 に答える
簡単に言うと、AsyncTaskdoInBackground()メソッドで表示機能を実行することはできません。
呼び出し p.dismiss();をonPostExecute()
onPostExecuteに移動するだけでも、AsyncTask-Classからオーバーライドする必要のあるメソッドです。
onPostExecuted(Void nothing)
{
p.dismiss();
}
p.dismiss();
doInBackground()メソッドでprogressdialogを破棄しないでください。onPostExecute()メソッドで実行する必要があります
問題:
01-18 12:58:39.086: E/AndroidRuntime(16249): Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
ProgressDailog dialogこれは、WorkerThreadでdoInBackground()実行されるAsyncTaskを閉じているためです。ActivityMainThreadProgressDailog dialogで実行している間..
また、Androidは、Workerまたはその他のスレッドのビューを更新することを固く許可されていません。
AsyncTaskから削除 p.dismiss();しdoInBackground()て配置するだけですonPostExecute()
何かのようなもの:
protected Void doInBackground(Void... nothing){
Globals.shopCon=new ShopConnection("http://" + Globals.ip + "/ws410/rest/");
return null;
}
onPostExecuted(Void nothing)
{
p.dismiss();
}
ログのように:
CalledFromWrongThreadException: ビュー階層を作成した元のスレッドのみがそのビューにアクセスできます
で却下しようとしているから ProgressDialogですdoInBackground。p.dismiss()中に入るだけonPostExecute
コードの新しいバージョンは、こちら から入手できます。内部の進行状況ダイアログを閉じるべきではありませんdoInBackground()