我遇到了一个似乎非常容易的问题。我看到很多关于我的问题的线索,但没有一个帮助我。这是关于获得共享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??
}
}
然而,显然我不明白,因为我不知道如何使用它。请提供一些适用于我的示例代码。
答案 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);