1

これが私のコードのプロトタイプです:-

class something extends Activity
{
    protected void onCreate(Bundle savedInstanceState)
    {
        String str = objectofanotherthing.execute("").get();
    }

    class anotherthing extends AsyncTask
    {
        ProgressDialog Dialog;
        protected void onPreExecute()
        {
            Dialog = ProgressDialog.show(context, "Progressing", "Working on it,");
        }

        protected String doInBackground(String... params) 
        {
            ...
        }

        protected void onPostExecute(Integer result)
        { 
            Dialog.dismiss();
        }
    }
}

コードを実行すると、プログラムがProgressDialog.showで停止しているように見えます。クラッシュもエラーもありません。この部分にコメントすると、プログラムは正常に実行されます。何ができるかわかりません。誰かがこれで私を助けることができますか?前もって感謝します。

4

1 に答える 1

2

を使用してAsyncTaskを呼び出すとget()、UIスレッドがブロックされ、アプリが応答を停止したように見える場合があります。get()それがちょうどであるように呼び出しを取りexecute()ます。

objectofanotherthing.execute("");

これは、実行がUIスレッドとは独立して行われるようになったため、文字列が有用なものを保持することを期待できないことを意味します。これを回避するには、AsyncTaskをアクティビティ内のネストされたクラスにし(スニペットはすでにこれを行っています)、doInBackground()何か便利なものを返しonPostExecute()、ダイアログを閉じて、設定する必要があるものをすべて設定します。

ネストされたクラスの代わりに、アクティビティをAsyncTaskに渡すか、インターフェイスを定義しますが、タスクが1つのアクティビティ用である場合は、ネストが簡単です。

于 2013-03-12T21:33:00.603 に答える