0

我正在使用 AsyncTask

我使用父创建意图没有错误。

创建对话框的行给父级无法解析为 ye。新的 parent.AlertDialog.Builder(this)

我得到的错误是父级不存在,但我在相同的方法中使用父级来调用意图

代码块私有类 SendTextOperation 扩展 AsyncTask {

      @Override
      protected void onPreExecute() {

        //Update UI here

      }

      @Override
      protected String doInBackground(String... params) {
            // Talk to server here to avoid Ui hanging 
          rt=TalkToServer("http://besttechsolutions.biz/projects/bookclub/login.php");
          return(rt);
      }      

      @Override
      protected void onPostExecute(String result) {  


          if (rt.contains("ok")) 
          {

              Intent i = new Intent(parent, cChat.class);
                startActivity(i);
          }
          else
          {

                 new parent.AlertDialog.Builder(this)
                .setTitle("Game Over")
                .setMessage("Your time is up, You saved " 
                        +" Million  more people!!")
                .setNeutralButton("Try Again",new DialogInterface.OnClickListener()
                {
                    public void onClick(DialogInterface dlg, int i)
                    {

                    }} ).show();    

          }
      }

}

假设您在名为 MyActivity 的类中声明了该类,然后在创建对话框时使用 MyActivity.this 而不是这个。

4

3 回答 3

1

为了AlertDialog从非 Activity 显示,您需要将当前 Activity 上下文传递给非 Activity 类,在您的情况下到SendTextOperation类。

Constructor为as创建一个SendTextOperation

public class SendTextOperation extends AsyncTask<String,Void,String>{
Context context;
    public SendTextOperation(Context context) {
        this.context = context;
    }

      @Override
      protected void onPreExecute() {

        //Update UI here

      }

      @Override
      protected String doInBackground(String... params) {
            // Talk to server here to avoid Ui hanging 
          rt=TalkToServer("http://besttechsolutions.biz/projects/bookclub/login.php");
          return(rt);
      }      

      @Override
      protected void onPostExecute(String result) {  


          if (rt.contains("ok")) 
          {

              Intent i = new Intent(context, cChat.class);
                startActivity(i);
          }
          else
          {

                 new context.AlertDialog.Builder(context)
                .setTitle("Game Over")
                .setMessage("Your time is up, You saved " 
                        +" Million  more people!!")
                .setNeutralButton("Try Again",new DialogInterface.OnClickListener()
                {
                    public void onClick(DialogInterface dlg, int i)
                    {

                    }} ).show();    

          }
      }

}

并开始SendTextOperation AsyncTask

SendTextOperation sendtxtasyncTask = new SendTextOperation(CurrentActivity.this);
sendtxtasyncTask.execute("");
于 2012-12-19T18:20:04.543 回答
0

看起来你应该这样称呼它:

final AlertDialog.Builder builder = new AlertDialog.Builder(_context);
            builder.setMessage(_context.getString(R.string.error) + ": " + _errorMessage)
                .setTitle(_context.getString(R.string.loginError))
                .setIcon(android.R.drawable.ic_dialog_alert)
                .setCancelable(true)
                .setPositiveButton(_context.getString(R.string.ok), null);

            final AlertDialog alert = builder.create();
            alert.show();

(我自己的示例代码)

如果 parent 是您的上下文,您的错误似乎正在尝试执行parent.AlertDialog.Builder(this),您需要在哪里使用。new AlertDialog.Builder(parent)

于 2012-12-19T18:20:34.093 回答
0

假设您在名为 MyActivity 的类中声明了该类,然后在创建对话框时使用 MyActivity.this 而不是这个。

于 2012-12-19T18:19:46.973 回答