全局对象在不应该被修改时被修改

时间:2013-03-14 04:58:11

标签: java android

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

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

myApp = (ExtendedBase) getApplicationContext();
JSONConfig = myApp.getConfig();
JSONObject page = JSONConfig.getJSONObject("singlePages").getJSONObject(pageTitle);
JSONObject pageJSON = page.getJSONObject("json");

有效。我从RESTful API获取资源,然后从自定义类中获取相同的东西。从异步任务中的全局可用pageJSON,MODIFY getApplicationContext()获取pageJSON,并进行另一次RESTful API调用以更新资源。哪个有效。但是,当我再次启动该过程时(返回活动并尝试通过获取pageJSON模板对象进行API调用以检索另一个资源),它以某种方式反映了我在进行更新时所做的更改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;
    }
}

2 个答案:

答案 0 :(得分:0)

公共类GlobalApplication扩展Application {      private 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();

}

同样,你可以存储多个全局值并以相同的方式检索。

不要忘记将应用程序添加到清单文件

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

希望这会对你有所帮助。

答案 1 :(得分:0)

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

public JSONObject getConfig() {

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

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