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()的操作时,可以在活动中修改它,而不会影响活动中的全局对象;我会在同一个全局实例上工作吗?或者我会复印一份?我想制作一个副本,这样我就可以在活动中修改它,而不会影响全局对象