【发布时间】:2012-12-17 20:31:36
【问题描述】:
我正在尝试从异步任务中访问已保存的首选项,但我总是收到错误“无法解决首选项”。有任何想法吗?以下是部分代码:
public class Login extends SherlockActivity {
SharedPreferences preferences;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
preferences = PreferenceManager.getDefaultSharedPreferences(this);
new LongOperationLogin(this).execute();
}
}
class LongOperationLogin extends AsyncTask<String, Void, String> {
private Login longOperationContext = null;
public LongOperationLogin(Login context) {
longOperationContext = context;
}
@Override
protected String doInBackground(String... params) {
//THIS IS WHERE I NEED THE VALUE
String username = this.preferences.getString("username", "n/a");
try {
//JSON fetching
}
} catch (MalformedURLException e) {
e.printStackTrace();
Log.v("Error", "URL exc");
} catch (IOException e) {
e.printStackTrace();
Log.v("ERROR", "IOEXECPTOIn");
} catch (JSONException e) {
e.printStackTrace();
Log.v("Error", "JsonException");
}
return null;
}
@Override
protected void onPostExecute(String result) {
}
}
protected void onPreExecute() {
}
protected void onProgressUpdate(Void... values) {
}
}
提前致谢! 罗伯特
【问题讨论】:
-
尝试使用
Login.this.preferences访问它 -
@Squonk 至少你有礼貌,我见过人们拿走我的 cmets 并将它们变成答案。即使我不确定自己是对的。
-
你的 AsyncTask 是 inner 类吗?使其包含在 Login 类中。您可能还想将其修饰符更改为私有/受保护。这取决于您需要它的位置,但要访问该变量,您需要将它放在
Login中 -
将 Login 类的大括号放在代码最后一行的末尾。
-
非常感谢 A-C 成功了!
标签: android variables scope android-asynctask preferences