Android AsyncTask,获得SharedPreferences,卡住了

时间:2015-10-22 20:55:25

标签: java android android-studio android-asynctask

我遇到了一个似乎非常容易的问题。我看到很多关于我的问题的线索,但没有一个帮助我。这是关于获得共享Prefferences ..

问题是我希望从doInBackground方法中获得计算结果,但我不知道如何使用方法getSharedPreferences

我的主要活动名为MainActivity。我还创建了新的Java Class,它应该在后台执行某些操作。这是代码:

package com.example.pablo.zad3;

import android.content.SharedPreferences;
import android.os.AsyncTask;

public class Background extends AsyncTask<Integer,Void,String>{

    @Override
    protected String doInBackground(Integer... params) {
        Integer n = params[0];
        StringBuilder sb=new StringBuilder();
       for(int i=1;i<250;i++)
       {
           sb.append(i+ " ");
           sb.append(n*i+"\n");
       }
        return sb.toString();
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);

        SharedPreferences prefs = //WHAT NOW??
    }
}

然而,显然我不明白,因为我不知道如何使用它。请提供一些适用于我的示例代码。

3 个答案:

答案 0 :(得分:1)

您的代码需要修改如下:

package com.example.pablo.zad3;

import android.content.SharedPreferences;
import android.content.Context;
import android.os.AsyncTask;

public class Background extends AsyncTask<Integer,Void,String>{

    private Context context;

    public Background(Context context) {
        this.context = context;
    }

    @Override
    protected String doInBackground(Integer... params) {
        Integer n = params[0];
        StringBuilder sb=new StringBuilder();
       for(int i=1;i<250;i++)
       {
           sb.append(i+ " ");
           sb.append(n*i+"\n");
       }
        return sb.toString();
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);

        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this.context);
    }
}

根据您提出的问题(主要问题以及评论中的问题),我猜您从未使用SharedPreferences。这是供您参考的链接。 http://developer.android.com/reference/android/content/SharedPreferences.html http://developer.android.com/training/basics/data-storage/shared-preferences.html http://www.pcsalt.com/android/storing-data-in-sharedpreferences-android/

答案 1 :(得分:1)

如果您的AsyncTask是某个Activity的内部类,那么您可以执行@Alex建议的内容并将其引用为

ParentActivity.this

如果AsyncTask独立存在,你需要提供你的Context,或者更好的是,使用回调来完成这个任务,你可以从你的onPostExecute调用它。

Background task = new Background(this, ...);
task.Run();

// Your Activity will need to have some callback methods that you've decided to create
public interface BackgroundListener{
    void onBackgroundCompleted(String s);
}

然后在你的onPostExecute:

@Override
protected void onPostExecute(String s) {
    super.onPostExecute(s);
    mCallback.onBackgroundCompleted(s);
}

答案 2 :(得分:0)

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);