-8

ユーザーがボタン「b」を押したときに非同期タスクを使用してメールを送信しましたが、エラーが表示され、エラーは「Error while executing doInBackground」および「First Activity has leaked a Window」です

    public class FirstActivity extends Activity implements OnClickListener
    {
    Button b;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        b=(Button)findViewById(R.id.button);
        b.setOnClickListener(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;

    }

    @Override
    public void onClick(View v) {

        ProgressDialog progress = new ProgressDialog(this);
          progress.setMessage("Loading...");
          new MyTask(progress).execute();


        Intent i=new Intent(this,newclass.class);
        startActivity(i);
            }


        // TODO Auto-generated method stub


    public class MyTask extends AsyncTask<Void, Void, Void> {
          private ProgressDialog progress;

        public MyTask(ProgressDialog progress) 
        {
            this.progress = progress;

        }
          public void onPreExecute()
          {

              super.onPreExecute();
              progress.show();

          }

          public Void doInBackground(Void... unused)
          {

              String detail="sending mmail";
              new MainActivity(detail);
            return null;
          }

          public void onPostExecute(Void unused) 
          {
            progress.dismiss();

          }
        }


}
4

3 に答える 3

1

doInBackgroundでこのメソッドを使用してみてください...

    public Void doInBackground(Void... unused)
      {
                   runOnUiThread(new Runnable()
            {

                public void run() 
                                    {
                    // TODO Auto-generated method stub

          String detail="sending mmail";
          new MainActivity(detail);
        return null;
                }
            });

      }
于 2013-01-09T13:01:31.973 に答える
0

エラーは、進行状況ダイアログを開始した直後に新しいアクティビティを開始しているためです (ダイアログはコンテキストを失います)。onPostExecute() に移動する必要があります。

public void onPostExecute(Void unused){
    progress.dismiss();
    Intent i = new Intent(this,newclass.class);
    startActivity(i);
}
于 2013-01-09T12:51:15.753 に答える
0

がまだオンの状態で、新しいActivity、にナビゲートしようとしています。それがメモリリークの原因です。MainActivityProgressDialog

于 2013-01-09T12:51:44.307 に答える