したがって、起動する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()