0

サーバーからデータを正常に取得できました。データが成功した場合は、NextScreen.1 をナビゲートしています。データを取得するときに戻るボタンを押すと、AsyncTask ダイアログが消えますが、しばらくすると Nextscreen アクティビティに移動します。したがって、backbuttob ayn タスクを押すと、キャンセルする必要があり、次のアクティビティに移動することはできません。

    public class Screenone extends Activity {
    EditText user,pass;
    Button login;           
    InputStream is;
    String productResponse;
    EditText edit;   
    int responseCode;               

   @Override
   protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);


    requestWindowFeature(Window.FEATURE_NO_TITLE);  
    setContentView(R.layout.mainlog);       

    user = (EditText) findViewById(R.id.user);
    pass =  (EditText) findViewById(R.id.password);     
    login = (Button) findViewById(R.id.login);

   }    

    login.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub      

            if ((user.getText().length() > 0)
                    && (pass.getText().length() > 0) ) {                
                new Load().execute(Status);
            }
                    }
    });

   }


   private class Load extends AsyncTask<String, String, String> {

    private ProgressDialog Dialog = new ProgressDialog(LoginScreen.this);
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
        Dialog.setMessage("Please wait...");
        Dialog.show();
    }

    protected String doInBackground(String... status) { 
                try {
            HttpClient httpclient = new DefaultHttpClient();                     

     HttpPost post = new HttpPost("---url---");                     
            responseCode =httpResponse.getStatusLine().getStatusCode();

        }           


        catch (Exception e) {           
                            }                     
        return null;
    }


    protected void onPostExecute(String Result) {
        // TODO Auto-generated method stub
        super.onPostExecute(Result);      

            if (responseCode==200) {            
            Dialog.dismiss();           

            Intent intent =new Intent(Screenone.this, NextScreen.class);
            startActivity(intent);                          
                        }           

                            }               
            }


   public void onBackPressed() {
    // TODO Auto-generated method stub
    super.onBackPressed();

     moveTaskToBack(true);

   }

   }
4

2 に答える 2

0

問題は、asynctask への参照がないことです。asynctask の Activity にプロパティを作成してみてください。

private Load myAsyncTask;

今あなたのonClickメソッドで:

myAsyncTask=new Load();

myAsyncTask.execute(Status);

そして最後に onBackPressed で:

 public void onBackPressed() {
    super...
    if(myAsyncTask!=null)
         myAsyncTask.cancel(true);
 }
于 2013-02-13T11:36:16.350 に答える
0

現在の Activity から戻る前に、 AsyncTask をキャンセルし、 ProgressDialog を閉じ、 HttpPost を中止する必要があります。次のように試してください:

@Override
public void onBackPressed() {
     if(Load!=null){
        if(!Load.getStatus() == AsyncTask.Status.FINISHED){
           // first abort Httppost request 
           // post.abort();   
           httpclient.getConnectionManager().shutdown();

           // now dismiss ProgressDialog
            if (Dialog!=null&&Dialog.isShowing()) {
                 Dialog.dismiss();
             }
           // now cancel AsyncTask if running
            if(Load.getStatus() == AsyncTask.Status.RUNNING){
              Load.cancel(true);
             }
         }
     }
}
于 2013-02-13T18:00:23.023 に答える