1

doInBackGroundユーザーが戻るボタンを押したときに設定されているフラグをキャッチできるように、このコードを自分に追加しようとしています

protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i++) {
             totalSize += Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100));
             // Escape early if cancel() is called
             if (isCancelled()) break;
         }
         return totalSize;
     }

これは私doInBackGroundと、asynctask をキャンセルするフラグを設定するために使用するコードです。

@Override
public void onBackPressed() 
{              
    /** If user Pressed BackButton While Running Asynctask
        this will close the ASynctask.
     */
    if (mTask != null && mTask.getStatus() != AsyncTask.Status.FINISHED)
    {
        mTask.cancel(true);
    }          
    super.onBackPressed();
    finish();
}


@Override
protected void onDestroy() {
    // TODO Auto-generated method stub


/** If Activity is Destroyed While Running Asynctask
        this will close the ASynctask.   */

 if (mTask != null && mTask.getStatus() != AsyncTask.Status.FINISHED)
 {
    mTask.cancel(true);
  }  

    super.onDestroy();

}

@Override
protected void onPause() {
    // TODO Auto-generated method stub


 if (pDialog != null)
 {
     if(pDialog.isShowing())
     {
         pDialog.dismiss();
     }
        super.onPause();

  }  

}

class LoadAllData extends AsyncTask<String, String, String> {



    protected String doInBackground(String... args) {  

        try {
            Intent in = getIntent();
            String searchTerm = in.getStringExtra("TAG_SEARCH");
            String query = URLEncoder.encode(searchTerm, "utf-8");
            String URL = "example.com";
            JSONParsser jParser = new JSONParsser();
            JSONObject json = jParser.readJSONFeed(URL);
            try {

                JSONArray questions = json.getJSONObject("all").getJSONArray("questions");

                for(int i = 0; i < questions.length(); i++) {
                    JSONObject question = questions.getJSONObject(i);


                String Subject = question.getString(TAG_QUESTION_SUBJECT);
                String ChosenAnswer = question.getString(TAG_QUESTION_CHOSENANSWER);
                String Content = question.getString(TAG_QUESTION_CONTENT);

問題はisCancelled、asynctask に変換しようとしたときに発生します。「解決できませんDownloader」というエラーが表示されます「 AsyncTask 型のメソッド(String...) は引数 (int) には適用できません」というエラーも表示されます。を私の AsyncTaskに入れるのを手伝ってください。また、調査を行ったところ、コードで使用する方法が複数あることがわかりました。初めての人にとっては、対処が本当に面倒になる可能性があることに気づきました。DownloaderpublishProgresspublishProgressisCancelledisCancelledisCancelled

4

2 に答える 2

0

この場合、Asynctask クラス用に別のファイルを作成する必要があります。インターフェイスのコールバックも行います。

onBackPress ボタンをオーバーライドする必要はありません。progressDialog を cancelable(True) に設定し、onCancelListner() を設定するだけです。ここで、フラグ isCanceld = true; を設定できます。

シナリオ全体はこのリンクで定義されています。

UIにコールバックを送信するandroid asynctask

これを試してくださいの答えを見て、Dmitry Zaitsevどこかで立ち往生している場合は教えてください

お役に立てれば

于 2013-09-19T04:43:56.583 に答える