Java Android异步任务,获取SharedReferences,卡住了

Java Android异步任务,获取SharedReferences,卡住了,java,android,android-studio,android-asynctask,Java,Android,Android Studio,Android Asynctask,我遇到了一个似乎很容易解决的问题。。我见过很多关于我的问题的帖子,但没有一条对我有帮助。这是关于获得共享的预引用 问题是我想从doInBackground方法的计算中得到结果,但我只是不知道如何使用方法getSharedReferences 我的主要活动名为MainActivity。我还创建了新的Java类,它应该在后台做一些事情。代码如下: package com.example.pablo.zad3; import android.content.SharedPreferences; im

我遇到了一个似乎很容易解决的问题。。我见过很多关于我的问题的帖子,但没有一条对我有帮助。这是关于获得共享的预引用

问题是我想从
doInBackground
方法的计算中得到结果,但我只是不知道如何使用方法
getSharedReferences

我的主要活动名为
MainActivity
。我还创建了新的
Java类
,它应该在后台做一些事情。代码如下:

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??
    }
}
package com.example.pablo.zad3;
导入android.content.SharedReferences;
导入android.os.AsyncTask;
公共类后台任务{
@凌驾
受保护字符串doInBackground(整数…参数){
整数n=参数[0];
StringBuilder sb=新的StringBuilder();

对于(int i=1;i您的代码需要修改如下:

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);
    }
}
package com.example.pablo.zad3;
导入android.content.SharedReferences;
导入android.content.Context;
导入android.os.AsyncTask;
公共类后台任务{
私人语境;
公共背景(上下文){
this.context=上下文;
}
@凌驾
受保护字符串doInBackground(整数…参数){
整数n=参数[0];
StringBuilder sb=新的StringBuilder();

对于(inti=1;i如果您的AsyncTask是某个活动的内部类,那么您可以按照@Alex的建议执行,并将其引用为

ParentActivity.this
如果AsyncTask独立存在,则需要为其提供上下文,或者更好地使用回调来完成此任务,您可以从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);
}

你说的
YourActivity
是什么意思?我用“MainActivity”尝试了这个方法,但我得到的错误是它不是封闭类。然后将你的活动传递给你的后台构造函数。我没有注意到你已经有了上下文。所以使用上下文,我已经编辑了答案,或者只是将
SharedReferences
对象传递给任务。确实如此不需要整个上下文。@TmKVU你能解释一下吗?我是Java/Android Studio的新手,我真的不知道怎么做。和这个答案一样,但是你传递的是
SharedReferences
,而不是整个上下文。你可以在
活动中获得
SharedReferences
,谢谢你的回答。很遗憾,我只是因为我是新来的,我不明白类似的问题的答案。
@Override
protected void onPostExecute(String s) {
    super.onPostExecute(s);
    mCallback.onBackgroundCompleted(s);
}