我创建了一个SharedPreferences类,以便其余的Activity可以在线使用来获取首选项。
public class SPAdapter extends Activity {
public final String preferenceSettings = "STORAGE";
// Default value if row does not exist in preference
public static final String rowExistence = "Row did not exist";
public String prefGet(String preferenceName, String rowId) {
SharedPreferences preferenceObject = getSharedPreferences(preferenceName, MODE_PRIVATE);
String value = preferenceObject.getString(rowId, rowExistence);
return value;
}
我像这样使用这种方法:
public class Splash extends Activity {
private SPAdapter spObject;
public String rowNumber(0);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
spObject.prefGet(spObject.preferenceSettings,
rowNumber);
}
但是,每当我尝试使用此方法时,应用程序崩溃都会显示有关上下文的错误。任何人都可以帮助我实现这个目标吗?
答案 0 :(得分:0)
这种方法的问题在于您从Activity扩展SPAdapter并且没有正确初始化它,它没有正确的Context集,因此无法通过它从框架中获取SharedPreferences实例。但无论如何,这不是你应该在Android中做事的方式,你不是实例化新Activity对象的人,它应该是框架的工作。以下是实现此目的的两种方法:
从SPAdapter扩展您的Splash活动。
不要从Activity扩展SPAdapter,只需传递Context对象的引用并使用它来获取SharedPreferences实例。像这样:
公共类SPAdapter { public final String preferenceSettings =“STORAGE”;
// Default value if row does not exist in preference
public static final String rowExistence = "Row did not exist";
private Context ctx;
public SPAdapter(Context ctx){
this.ctx = ctx;
}
public String prefGet(String preferenceName, String rowId) {
SharedPreferences preferenceObject = ctx.getSharedPreferences(
preferenceName, Context.MODE_PRIVATE);
String value = preferenceObject.getString(rowId, rowExistence);
return value;
}
}
像这样使用:
public class FsActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
SPAdapter sa = new SPAdapter(getApplicationContext());
sa.prefGet("", "");
}
}
第一个解决方案看起来好一些。