我正在尝试传递SharedPreferences prefs,作为AsyncTask中doInBackground函数的参数。我已经传递了一个字符串(url),所以我还需要将prefs作为字符串传递。我可以简单地使用prefs.toString()将其转换为字符串吗?
这是我设置prefs的地方:
if (prefs.getBoolean("firstrun", true)) {
prefString = prefs.toString();
prefs.edit().putBoolean("firstrun", false).commit();
}
答案 0 :(得分:4)
你不能也不应该。只需使用PreferenceManager
,您就可以轻松阅读doInBackground()
内的首选项,只需使用{{3}}:
public class DownloadFiles extends AsyncTask<URL, Void, Void> {
Context ctx;
DownloadFiles(Context ctx) {
this.ctx = ctx;
}
@Override
public void doInBackground(URL... urls) {
// ...
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ctx);
// ...
}
}
答案 1 :(得分:0)
试试这段代码:
public class DownloadFiles extends AsyncTask<URL, Void, Void> {
Context ctx;
boolean firstLaunch;
SharedPreferences prefs;
DownloadFiles(Context ctx) {
this.ctx = ctx;
prefs = ctx.getSharedPreferences("Prefs",Context.MODE_PRIVATE);
}
@Override
public void onPreExecute() {
firstLaunch = prefs.getBoolean("firstrun", true);
}
@Override
public void doInBackground(URL... urls) {
if(firstLaunch)
// code for the firstLaunch
else
//code if it isn't the firstLaunch
}
@Override
public void onPostExecute(Void params) {
// update prefs after the firstLaunch
if(firstLaunch)
prefs.edit().putBoolean("firstrun", false).commit();
}
}