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);
}