7

私はしばらくこれに困惑しています。私は、人の漁獲量、お気に入りの釣り場所、タックルボックスの在庫などのデータを保存するAndroidアプリに取り組んでいます。私のクラスはすべてシリアル化可能であり、これまでのところ機能しているように見えるアクティビティ間で保存およびロードできます。しかし、保存されるデータが増えるにつれて、アプリの実行が遅くなると予測しています。

私が基本的に求めているのは、アプリケーション全体でこのデータを保持する方法があるので、新しい画面が表示されるたびにデータをロードする必要はありません。私はすでに次の情報が役立つことを発見しましたが、私が理解するにはもう少し明確にする必要があります。

別のフォーラムでは、Applicationオブジェクトに詰め込むことができると述べています。

[Application]
public class MyApp : Android.App.Application {
    public MyApp(IntPtr handle)
        : base (handle)
    {
    }

    public FishingData Data {get; set;}
}

次に、アクティビティ内で:

((MyApp) this.ApplicationContext).Data = value;

したがって、これまでこのアプローチを実行することを実際に聞いたことがなく、これがアプリケーションプロセス全体で実行されるかどうかはわかりません(どちらの方法でも、シリアル化を介してデータをロードする必要があると思います。これがアプリに実行してほしいことです。 :

最初のアクティビティはメインメニューであり、画面が読み込まれたときに次の操作を行う必要があります。

  1. 設定ファイルが見つかった場合は、シリアル化を使用して以前のFishingDataオブジェクトをロードします(これを行う方法を知っています)
  2. そうでない場合は、後で保存するために新しいクリーンなFishingDataオブジェクトを作成します(これも知っています)
  3. これでFishingDataオブジェクトができたので、すべてのアクティビティで手順1〜2を繰り返す必要がないことを確認するにはどうすればよいですか。どうすればFishingDataオブジェクトを次のアクティビティに渡し、アプリがまだ動作している間にグローバルに動作するようにすることができますか。(シリアル化を介して)一度だけロードし(<-これを行う方法がわからない)、ユーザーがこのオブジェクトにデータを追加したときにのみ保存した​​い(これは私が行う方法を知っています)。

どんな助けでもありがたいです。これは私を悩ませています私はこれを理解できないようです。これはよくあることのようですが、詳細な情報を見つけることができませんでした。

4

2 に答える 2

3

これが、パーセラブルを介してアプリにデータを渡す方法です。あなたがFishermanという名前のクラスを持っているとしましょう(基本的にユーザー向け)

public class Fisherman implements Parcelable {
 private String name;
 private Tacklebox box;
 public int describeContents() {
     return 0;
 }

 public void writeToParcel(Parcel out, int flags) {
     out.writeString(name);
     out.writeParcelable(box, 0);
 }

 public static final Parcelable.Creator<Fisherman> CREATOR
         = new Parcelable.Creator<Fisherman>() {
     public Fisherman createFromParcel(Parcel in) {
         return new Fisherman(in);
     }

     public Fisherman[] newArray(int size) {
         return new Fisherman[size];
     }
 };

 private Fisherman(Parcel in) {
     name = in.readString();
     box = in.readParcelable(com.fisher.Tacklebox);
 }
}

この例では、使用しているデータモデルごとにパーセル可能を定義します。つまり、タックルボックスと呼ばれる別のオブジェクトを含む漁師オブジェクトがあるとします。モデルをネストし続ける場合は、タックルボックスなどにもこれを定義します。このように、アクティビティ間でデータを渡すために必要なのは

Intent intent = new Intent(this, Activity.class);
intent.putParcelableExtra("com.fisher.Fisherman", fisherman);

と読んで

Bundle b = getIntent().getExtras();
Fisherman fisher = b.getParcelable("com.fisher.Fisherman");

これは残念ながらあなたの問題のステップ3にしか答えませんが、あなたがやろうとしていることは1つの質問よりも少し長いので、3つのステップのそれぞれを独自の質問に分割することをお勧めします

于 2012-11-29T19:51:48.723 に答える
1

このアプローチを使用できます。オブジェクトが存続している限り存続しますApplicationつまり、アプリケーションとアクティビティ全体を通じて存続します)。オブジェクトに格納されているグローバル変数の使用について詳しくは、こちらをご覧ください。モノがこのアプローチを使用することを妨げるような違いを生むとは思わない。Application

于 2012-11-29T19:35:00.410 に答える