0

我正在尝试将 SharedPreferences 首选项作为参数传递给 AsyncTask 中的 doInBackground 函数。我已经将字符串(url)传递给它,所以我需要将首选项也作为字符串传递。我可以简单地使用 prefs.toString() 将其转换为字符串吗?

这是我设置首选项的地方:

if (prefs.getBoolean("firstrun", true)) {
            prefString = prefs.toString();
            prefs.edit().putBoolean("firstrun", false).commit();
        }
4

2 回答 2

4

你不能也不应该。您可以轻松读取内部的首选项,doInBackground()而无需将任何内容传递给该方法,只需使用PreferenceManager

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);
    // ...
  }
}
于 2012-12-27T10:58:04.277 回答
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();
      }
    }
于 2012-12-27T11:15:46.920 回答