0

最近、いくつかのアプリを書いているときに、1 つの問題で止まってしまいました。

このアプリには、A と B の 2 つのアクティビティがあります。アクティビティでは、AI は GPS 座標が変わるたびに Web からオブジェクトのリストをダウンロードしています。このアクティビティには、GPS とインターネット接続通話を使用した接続バインド サービスがあります。これらのオブジェクトは、名前から作成されたリストに入れられ、これのいずれかを押した後、このオブジェクトを渡す B アクティビティを開き、アクティビティ B でこのオブジェクトからさらに情報を取得できます。

アクティビティ B にはバインドされたサービスがありません。オブジェクトの内部にあるものを取得して表示するだけです。

アクティビティ A のバインドされたサービスは onStop でバインドされていないため、戻る矢印を使用して戻ると、すべてを再度ダウンロードするのに時間がかかります。さらに興味深いことに、リストはまだいっぱいですが、それらは名前だけであり、オブジェクトの実際のリストは存在せず、カムバック直後に名前のいずれかを押すと、OutOfBoundException が発生します。

それで、私の質問は、新しい(またはこれと同じ)リストをダウンロードする前に、私が活動Aを生きているときにこのオブジェクトを保存し、戻ってきたときにそれらを取得するために何をすべきかアドバイスしてください。

私はもう試した:

  • onRestoreInstanceState()パーセル可能なリストを保存できますがonSaveInstanceState()、アクティビティ A はそれほど速く破棄されないため、onRestoreInstanceState();の呼び出しはありません。
  • Shared preferences、しかし、そこにリストを保存できないため、それは悪い選択でした;
  • ContentValuesまたcontent resolvers、リストを保存できないため、悪い選択です。

他に何かアイデアはありますか?

言い忘れましたが、リストには最大 100 個のオブジェクトがあり、各オブジェクトには 5 つのフィールドがあると仮定しています。

4

3 に答える 3

1

Singleton クラスを作成し、オブジェクトを HashMap または ArrayList (適切なものは何でも) に格納し、他のアクティビティでそのリストにアクセスします。

import java.util.ArrayList;

public class DataHandler {
    private static DataHandler handler;
    private ArrayList<Object> list;

    private DataHandler() {
    }

    public static DataHandler getInstance() {
        if (handler == null)
            handler = new DataHandler();
        return handler;
    }

    public ArrayList<Object> getList() {
        return list;
    }

    public void setList(ArrayList<Object> list) {
        this.list = list;
    }
}
于 2013-03-02T12:13:54.087 に答える
0

SharedPreferencesとContentValuesを使用しない理由がリストを処理できないためである場合は、リストをJSONなどにシリアル化し、文字列として保存し、ロード時にオブジェクトにマップすることを検討してください。たとえば、オブジェクト<->JSONを変換するのは通常2行のコードです。

于 2013-03-02T12:09:35.420 に答える
0

ダウンロードしたデータをここのようなシングルトンクラスにキャッシュする必要があります

クラスDataController{

public static ArrayList aa;

}

データをダウンロードするときにこの配列リストに入力し、アクティビティでこのリストがnullでないかどうかを確認してから、ダウンロードする代わりにこの配列リストのみを使用してください。シングルトンクラスの概念についてさらに調査を行うと、非常に役立つことを学ぶことができると確信しています。

于 2013-03-02T12:09:36.733 に答える