Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.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
Java 不应修改的全局对象';不可能_Java_Android - Fatal编程技术网

Java 不应修改的全局对象';不可能

Java 不应修改的全局对象';不可能,java,android,Java,Android,我扩展了应用程序类,允许存储应用程序范围的对象。其中一个对象是从应用程序本地JSON文件读入的JSONObject。EnvConfig是我编写的一个自定义类,它只返回JSON配置对象。这个ExtendedBase类使我可以在全局范围内使用它 我的问题是,当我在活动中时,我会执行以下操作来获取配置JSONObject。在其中,我在一个AsyncTask中获取了一个模板JSONObject(pageJSON),然后对其进行修改,并将其用作RESTful API调用的主体来检索资源 myApp = (

我扩展了
应用程序
类,允许存储应用程序范围的对象。其中一个对象是从应用程序本地JSON文件读入的
JSONObject
EnvConfig
是我编写的一个自定义类,它只返回JSON配置对象。这个
ExtendedBase
类使我可以在全局范围内使用它

我的问题是,当我在活动中时,我会执行以下操作来获取配置
JSONObject
。在其中,我在一个
AsyncTask
中获取了一个模板
JSONObject(pageJSON)
,然后对其进行修改,并将其用作RESTful API调用的主体来检索资源

myApp = (ExtendedBase) getApplicationContext();
JSONConfig = myApp.getConfig();
JSONObject page = JSONConfig.getJSONObject("singlePages").getJSONObject(pageTitle);
JSONObject pageJSON = page.getJSONObject("json");
这很有效。我从RESTful API获得资源,然后从自定义类获得资源,我也做同样的事情。从全局可用的
getApplicationContext()
获取
pageJSON
,在异步任务中修改
pageJSON
,并进行另一个RESTful API调用以更新资源。这很有效。但是,当我再次启动该过程时(返回活动并尝试通过获取
pageJSON
template对象进行API调用来检索另一个资源),它以某种方式反映了我在进行update API调用时所做的更改。原始的全局
JSONObject
完全不应更改。就像我在更新全局可用对象,而不是像我认为应该做的那样创建新的
JSONObjects

有人知道如何补救吗

import org.json.JSONObject;

import android.app.Application;

public class ExtendedBase extends Application {

    private EnvConfig envConfig;
    private JSONObject JSONConfig;
    public static Record record = null;
    public static Boolean hasSavedRecord = false;

    @Override
    public void onCreate() {
        envConfig = new EnvConfig();
        JSONConfig = envConfig.getEnvConfig(this);
        super.onCreate();
    }

    public JSONObject getConfig() {
        return JSONConfig;
    }

    public void setRecord(Record mRecord){
        this.record = mRecord;
    }

    public Record getRecord(){
        return record;
    }
}

公共类GlobalApplication扩展了应用程序{ 私有JSONObject全局变量

 public JSONObject getGlobalInstance() {
         return globalVariable;
 }

 public void setGlobalInstance(JSONObject globalVariable) {
         this.globalVariable = globalVariable;
 }
 @Override
 public void onCreate() {
         //reinitialize variable
 }
在活动中设置全局值

((GlobalApplication)getApplication()).setGlobalInstance(jsonObject);
像这样

jsonObject=((GlobalApplication)getApplication()).getGlobalInstance();
}

像wise一样,您可以存储多个全局值并以相同的方式检索

别忘了将应用程序添加到清单文件中

<application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        android:name="package.GlobalApplication" >

希望这将对您有所帮助。

更改
getConfig()
以获取最新值,而无需再次创建应用程序实例:

public JSONObject getConfig() {

 JSONConfig = envConfig.getEnvConfig(this);//call here instead of inside onCreate()
 return JSONConfig;
}

还要确保您没有在
EnvConfig
类构造函数中进行任何API调用

因此,在我的活动中,当我执行类似于JSONObject JSONConfig=myApp.getConfig()的操作时;我会在同一个全局实例上工作吗?或者我会复印一份?我想制作一个副本,以便在执行类似于JSONObject JSONConfig=((GlobalApplication)getApplication()).getGlobalInstance()的操作时,可以在活动中修改它,而不会影响活动中的全局对象;我会在同一个全局实例上工作吗?或者我会复印一份?我想制作一个副本,这样我就可以在活动中修改它,而不会影响全局对象