Android 我不能在构造函数中使用SharedReference吗?
我正在使用一个简单的类来执行一些操作计算,并希望在SharedReferences中写入一个值,以后可能会用到 然而,这是行不通的。我从Activity扩展了类,以便可以使用GetSharedReferences方法。这是否不正确且不允许 我在尝试初始化SharedReference编辑器时遇到空指针异常 代码如下:Android 我不能在构造函数中使用SharedReference吗?,android,android-sharedpreferences,Android,Android Sharedpreferences,我正在使用一个简单的类来执行一些操作计算,并希望在SharedReferences中写入一个值,以后可能会用到 然而,这是行不通的。我从Activity扩展了类,以便可以使用GetSharedReferences方法。这是否不正确且不允许 我在尝试初始化SharedReference编辑器时遇到空指针异常 代码如下: public class JSONParser extends Activity { // To store our preferences for JSON route
public class JSONParser extends Activity {
// To store our preferences for JSON route info
public static final String MY_PREFS_JSON = "JSONPrefs";
// Construct an object with JSON values
public JSONParser(String JSONString){
try {
JSONObject jsonObject = new JSONObject(JSONString);
JSONArray routesArray = jsonObject.getJSONArray("routes");
// fails with NullPointer
SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_JSON, MODE_PRIVATE).edit();
// Store in SharedPreferences our JSON value
editor.putString("JSON", routesArray.toString());
editor.commit();
}
}
}
正在添加错误消息:
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.content.SharedReferences android.content.Context.GetSharedReferencesJava.lang.String,int”活动不能有替代构造函数,或者更恰当地说,它们不应该有替代构造函数。活动只能有一个默认的空构造函数 此外,您不能在活动的构造函数中获取系统服务。它们都尚未创建,因此都将返回null 您必须等到ActivityonCreate检索SharedReferences
public class JSONParser extends Activity {
public static final String PARAM_JSON = "json";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String json = getIntent().getStringExtra(PARAM_JSON);
if (json == null || json.trim().isEmpty() {
finish();
return;
}
// do stuff with json.
}
}
然后以如下意图开始:
Intent intent = new Intent(context, JSONParser.class);
intent.putExtra(JSONParser.PARAM_JSON, jsonString);
活动不能有备用构造函数,或者更恰当地说,它们不应该有备用构造函数。活动只能有一个默认的空构造函数 此外,您不能在活动的构造函数中获取系统服务。它们都尚未创建,因此都将返回null 您必须等到ActivityonCreate检索SharedReferences
public class JSONParser extends Activity {
public static final String PARAM_JSON = "json";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String json = getIntent().getStringExtra(PARAM_JSON);
if (json == null || json.trim().isEmpty() {
finish();
return;
}
// do stuff with json.
}
}
然后以如下意图开始:
Intent intent = new Intent(context, JSONParser.class);
intent.putExtra(JSONParser.PARAM_JSON, jsonString);
在调用onCreate之前,不会创建活动上下文。因此,如果您想做一些涉及上下文的事情,那么在onCreate中进行
因此,在您的情况下-在启动活动时,使用intent.putExtra将JSONString传递给您的活动,并使用getIntent.getStringExtra在onCreate中获取它。在调用onCreate之前,不会创建活动上下文。因此,如果您想做一些涉及上下文的事情,那么在onCreate中进行
因此,在您的情况下-在启动活动时,使用intent.putExtra将JSONString传递给您的活动,并使用getIntent.getStringExtra在onCreate中获取它。您会遇到什么错误?您会遇到什么错误?那么,通过普通类将一些值写入SharedReference的解决方案是什么?或者,我想存储一个特定的字符串值JSON值,该值将来可能会在其他活动的其他地方使用。那么,通过普通类将一些值写入SharedReference的解决方案是什么呢?或者,我想存储一个特定的字符串值JSON值,该值将来可能会在其他活动的其他地方使用。更新了答案,说明如何将JSONString传递给您的活动。不,这并不能解决我的问题。这个类实际上是一个普通类,它被制作成一个活动,只是为了使用SharedReference。事实上,此类类型的对象是由另一个类创建的,而该类又不是活动。也许有另一种方法可以实现Im所做的事情,即保存其他活动中可能在其他时间访问的内容。如果是这种情况,请使用getApplicationContext将应用程序上下文从启动器活动一直传递到要使用prefs的类。并使用该上下文将pref保存在类活动或非活动的任何方法中。更新了答案,说明如何将JSONString传递给活动。不,这并不能解决我的问题。这个类实际上是一个普通类,它被制作成一个活动,只是为了使用SharedReference。事实上,此类类型的对象是由另一个类创建的,而该类又不是活动。也许有另一种方法可以实现Im所做的事情,即保存其他活动中可能在其他时间访问的内容。如果是这种情况,请使用getApplicationContext将应用程序上下文从启动器活动一直传递到要使用prefs的类。并使用该上下文将pref保存在类活动或非活动的任何方法中。