将SharedPreferences传递给doInBackground()

时间:2012-12-27 10:55:10

标签: java android sharedpreferences

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

这是我设置prefs的地方:

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

2 个答案:

答案 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();
      }
    }