我已经扩展了Application
类,允许我存储应用程序范围内的对象。其中一个对象是从应用程序本地的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应用程序接口中获取资源,然后从自定义类中执行相同的操作。从全局可用的getApplicationContext()
中获取pageJSON
,在异步任务中修改pageJSON
,然后再次调用RESTful API来更新资源。这是可行的。但当我再次启动该过程时(返回到活动并尝试通过获取pageJSON
模板对象进行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;
}
}
发布于 2013-03-14 05:09:16
公共类GlobalApplication扩展了应用程序{私有JSONObject globalVariable;
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" >
希望这能对你有所帮助。
发布于 2013-03-14 05:11:05
更改getConfig()
as以获取最新值,而无需再次创建应用程序实例:
public JSONObject getConfig() {
JSONConfig = envConfig.getEnvConfig(this);//call here instead of inside onCreate()
return JSONConfig;
}
还要确保您没有在EnvConfig
类构造函数中进行任何API调用。
https://stackoverflow.com/questions/15401514
复制相似问题