0

我在这里遇到语法错误的问题很少。下面我有一个alertDialogwith sharedPreference,如果你想知道为什么我在 asynctask 中有这个,你可以看到这个Shared Prefence for alert dialog 使我的应用程序没有响应但是语法问题installed在我的下面onPostExecute,它说“installed无法解析为变量。” settings我的下面还有一个onPostExecute也说同样的话。我知道这对某些人来说似乎很容易解决,但我发现对于像我这样的人来说这真的很复杂。AsyncTask如果您有比and更好的方法,我还建议您查看链接onResume()

@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

而不是返回 a Stringin doInBackground(实际上你总是 return null),你应该返回 a boolean(这将是installed),并onPostExecute更改 a 的参数boolean并测试它而不是 testing installed

编辑

花更多时间更新我的答案:

首先,我同意@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为接受 a boolean

protected void onPostExecute(boolean installed) {

这样,您可以installed在您的方法中进行测试。

于 2013-09-16T23:03:02.137 回答
0

installed变量是doInBackground方法的本地变量,onPostExecute看不到它。您可以添加一个实例变量:

class asynctask extends AsyncTask<String, String, String> {
  boolean installed = false;
  @Override protected String doInBackground(String... arg0) {
    installed = true;
  }
}

或者,您可以更改 Async Task 的签名,使其返回布尔值,然后简单地返回 installed from doInBackground,它将作为参数传递给onPostExecute

class asynctask extends AsyncTask<String, String, Boolean> {
  @Override protected Boolean doInBackground(String... arg0) {
    return true;
  }
  protected void onPostExecute(Boolean installed) {
  }
}
于 2013-09-16T23:07:04.880 回答