0

Applicationアプリケーション全体のオブジェクトを格納できるようにクラスを拡張しました。これらのオブジェクトの 1 つは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()で MODIFYpageJSONを実行し、別の 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() アプリケーションインスタンスを再度作成せずに最新の値を取得するように変更します。

public JSONObject getConfig() {

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

EnvConfigまた、クラスコンストラクター内でAPI呼び出しを行わないようにしてください。

于 2013-03-14T05:11:04.710 に答える
0

public class GlobalApplication extends 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" >

これがあなたを助けることを願っています。

于 2013-03-14T05:09:16.023 に答える