在AsyncTask中遇到错误

时间:2013-09-16 22:50:02

标签: android android-asynctask

我在这里遇到语法错误的问题。下面我有一个alertDialog sharedPreference如果你想知道为什么我在asynctask中有这个,你可以看到这个Shared Prefence for alert dialog is making my application non responsive但是语法问题在我的installed下面{ {1}}它表示“onPostExecute无法恢复为变量。”我的installed settings下面还有另一个也说同样的内容。我知道这对某些人来说似乎很容易解决,但我觉得这对我这样的人来说真的很复杂。如果您的方法比onPostExecuteAsyncTask

更好,我还建议您查看链接
onResume()

2 个答案:

答案 0 :(得分:1)

installed仅在doInBackground中声明,因此在onPostExecute中无法显示。

您应该返回StringdoInBackground,而不是在null中返回boolean(实际上您总是返回installed) ),并在onPostExecute中更改boolean的参数并对其进行测试,而不是测试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的参数以接受boolean

protected void onPostExecute(boolean installed) {

这样,您可以在方法中测试installed

答案 1 :(得分:0)

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

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

或者,您可以更改Async Task的签名,使其返回布尔值,然后只需从doInBackground返回安装,它将作为参数传递给onPostExecute

class asynctask extends AsyncTask<String, String, Boolean> {
  @Override protected Boolean doInBackground(String... arg0) {
    return true;
  }
  protected void onPostExecute(Boolean installed) {
  }
}