我在这里遇到语法错误的问题。下面我有一个alertDialog
sharedPreference
如果你想知道为什么我在asynctask中有这个,你可以看到这个Shared Prefence for alert dialog is making my application non responsive但是语法问题在我的installed
下面{ {1}}它表示“onPostExecute
无法恢复为变量。”我的installed
settings
下面还有另一个也说同样的内容。我知道这对某些人来说似乎很容易解决,但我觉得这对我这样的人来说真的很复杂。如果您的方法比onPostExecute
和AsyncTask
onResume()
答案 0 :(得分:1)
installed
仅在doInBackground
中声明,因此在onPostExecute
中无法显示。
您应该返回String
(doInBackground
,而不是在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) {
}
}