Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我不能在构造函数中使用SharedReference吗?_Android_Android Sharedpreferences - Fatal编程技术网

Android 我不能在构造函数中使用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

我正在使用一个简单的类来执行一些操作计算,并希望在SharedReferences中写入一个值,以后可能会用到

然而,这是行不通的。我从Activity扩展了类,以便可以使用GetSharedReferences方法。这是否不正确且不允许

我在尝试初始化SharedReference编辑器时遇到空指针异常

代码如下:

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保存在类活动或非活动的任何方法中。