0

入れ方わかる人いますAlertDialogAsyncTask?WebService を使用するアプリケーションがあります。そのため、アプリケーションを起動するために IP アドレスを入力しました。現在、デフォルトのIPアドレスを入力する必要がありAlertDialog、それを使用して変更します。設定-> IPの挿入のように。今のところ、アプリケーションが起動するたびにAlertDialog最初に作成したいと思います。その解決策には、を使用する必要があると思いますAsyncTask。しかし、私がそれを実装する方法では、使用に関していくつかの問題がありますAsyncTask

以下は、AsyncTask forr ip を使用しないアプリケーションの場合を示しています。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // set the ip address
        ip = "124.23.204.135";

        //asyncTask for updating gamer's information
        new GamerWorker().execute(ip);

        //refreshing GUI
        intent = new Intent(this, BroadcastService.class);

私はAsyncTask GamerWorker()WebService からの情報を更新するために使用しています。また、GUI を一新する意向も表明しています。以下は、私が実装したときのショーAsyncTaskですAlertDialog

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // set the ip address
        LayoutInflater inflater = getLayoutInflater();
        final View dialoglayout = inflater.inflate(
                R.layout.alertdialog_add_gamer, null);
        // start creating the dialog message
        Builder builder = new AlertDialog.Builder(this);
        builder.setView(dialoglayout);
        builder.setPositiveButton("Yes",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int id) {
                        // get the editText from the dialog's view
                        EditText text = (EditText) dialoglayout
                                .findViewById(R.id.et_gamerIpOrWebAdress);
                        // disable all input views
                        ip = text.getText().toString();

                    }
                });
        builder.setNegativeButton("No",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int id) {
                        // cancels the dialog
                        dialog.dismiss();
                    }
                });
        new MyTask(builder).execute();
        //refreshing GUI
        intent = new Intent(this, BroadcastService.class);
    }

そして、そのためAsyncTaskに私は宣言しました:

public class MyTask extends AsyncTask<Void, Void, Void> {
          private Builder builder;

        public MyTask(Builder builder) {
            this.builder = builder;
          }

          public void onPreExecute() {
             AlertDialog dialog = builder.create();
            dialog.show();
          }

          public Void doInBackground(Void... unused) {
            return null;
          }

          public void onPostExecute(Void unUsed) {
            new GamerWorker().execute(ip);
          }
        }

実際にはAlertDialog、私はこの回答に従っています: Androidでアクティビティを開始する前に進行状況ダイアログを表示する方法は? 私の問題は、私が置くときです:

         //refreshing GUI
        intent = new Intent(this, BroadcastService.class);

preExecuteでは動かないのですが、onCreateに入れるとnullポインタになってしまいます。誰でもこの問題を解決する方法を知っていますか?AlertDialogアプリケーションの起動時に使用できるように

EDIT : インテントを preExecute に入れることができます。インテントを に変更するだけintent = new Intent(MainActivity.this, BroadcastService.class);です。しかし、それは問題を解決できないようです。ダイアログは作成されておらず、常に null ポインターを取得していました。

4

1 に答える 1

0

今のところ、使用せずに解決しAsyncTaskます。だから私は宣言したばかりで、ipがnullの場合は-statementを入れて、ダイアログが表示されますonCreate()Ifユーザーが Ip を設定した場合、前述のようにAsyncTask情報を更新するために を実行します。WebService

       ip = "";
        // start creating the dialog message
        builder = new AlertDialog.Builder(this);
        builder.setView(dialoglayout);
        builder.setPositiveButton("Yes",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int id) {
                        // get the editText from the dialog's view
                        EditText text = (EditText) dialoglayout
                                .findViewById(R.id.et_gamerIpOrWebAdress);
                        // disable all input views
                        ip = text.getText().toString();
                        if (!ip.equals(""))
                        {
                            new GamerWorker().execute(ip);

                            //refreshing GUI
                            intent = new Intent(MainActivity.this, BroadcastService.class);
                        }
                        //clear();
                        //myList.clear();   

                    }
                });
        builder.setNegativeButton("No",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int id) {
                        // cancels the dialog
                        dialog.dismiss();
                    }
                });

        if (ip.equals("") && ip.isEmpty())
        {
            AlertDialog dialog = builder.create();
            dialog.show();

        }
        else
        {
        // set the ip address
            //ip = "123.123.224.133";
            new GamerWorker().execute(ip);
            intent = new Intent(MainActivity.this, BroadcastService.class);
        }
    }

を使用した別の解決策がある場合はAsyncTask、お知らせください。ありがとう

于 2013-11-18T10:57:15.590 に答える