0

ここでは、構文エラーに関する問題はほとんどありません。以下にalertDialogwith がsharedPreferenceありますが、なぜこれが asynctask にあるのか疑問に思われる場合は、アラート ダイアログの共有設定により、アプリケーションが応答しなくなりますが、構文の問題が下installedonPostExecuteあり、「installed変数に解決できません」と表示されます." settings私の下にもonPostExecute同じことを言っている別のものがあります。これは一部の人にとっては簡単な修正のように思えるかもしれませんが、私のような人にとっては非常に複雑です. また、より良い方法がある場合は、リンクを参照することをお勧めしますAsyncTaskonResume()

@Override
protected void onResume() {

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

        @Override
        protected String doInBackground(String... arg0) {
            final SharedPreferences settings = getSharedPreferences("pref_name", 0);
            boolean installed = settings.getBoolean("installed", false);

            return null;
        }}}

    protected void onPostExecute(String file_ad) {

        if(!installed){

            final AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);

            alertDialog.setTitle("Title");
            alertDialog.setIcon(R.drawable.ic_launcher);
            alertDialog.setAdapter(new MyAdapter(), null);

            alertDialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {

                public void onClick(DialogInterface dialog, int which) {
                    SharedPreferences.Editor editor = settings.edit();
                    editor.putBoolean("installed", true);
                    editor.commit();

                }
            });

            alertDialog.show();
    }
    super.onResume();
}
4

2 に答える 2

1

installedでのみ宣言されdoInBackgroundているため、 には表示されませんonPostExecute

Stringin doInBackground(実際には常に を返す場所)を返す代わりに、 (実際には常に を返すnull) を返し、inのパラメーターを変更して、テストの代わりにテストする必要があります。booleaninstalledonPostExecutebooleaninstalled

編集

私の答えを更新するのにもっと時間がかかります:

まず、@codeMagic に同意します。これを行う必要は絶対にありません。AsyncTask

しかし、本当にこの方法でやりたい場合は、次の方法で行うことができます: まず、AsyncTaskこの方法の署名を変更する必要があります:

class asynctask extends AsyncTask<String, String, Boolean> {

次に、doInBackgroundで戻り値を変更し、 を返す代わりに をnull返しinstalledます。

@Override
protected boolean doInBackground(String... arg0) {
        final SharedPreferences settings = getSharedPreferences("pref_name", 0);
        boolean installed = settings.getBoolean("installed", false);

        return installed;
}}}

最後に、 のパラメーターを変更して、onPostExecuteを受け入れるようにしbooleanます。

protected void onPostExecute(boolean installed) {

このようにして、メソッドでテストできinstalledます。

于 2013-09-16T23:03:02.137 に答える