0

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

我的问题是,当我进行活动时,我会执行以下操作来获取 config 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在异步任务中从全局可用getApplicationContext()的 MODIFY中获取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;
    }
}
4

2 回答 2

0

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

public JSONObject getConfig() {

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

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

于 2013-03-14T05:11:04.710 回答
0

公共类 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();

}

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

不要忘记将 Application 添加到清单文件中

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

希望这会帮助你。

于 2013-03-14T05:09:16.023 回答