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

以下是我如何通过 parcelable 在应用程序中传递我的数据。假设您有一个名为 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);
 }
}

在此示例中,您为拥有的每个数据模型定义 parcelable。假设您有一个渔夫对象,其中包含另一个称为钓具箱的对象。如果您继续嵌套模型,您还将为解决箱定义它,依此类推。这样,您在活动之间传递数据所需要做的就是

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 步,但我建议将您的 3 个步骤中的每一步都分解为自己的问题,因为您尝试做的事情比一个问题稍长

于 2012-11-29T19:51:48.723 回答
1

您可以使用这种方法,只要您的Application对象还活着,它就会一直存在(这意味着它将存在于您的整个应用程序和活动中)。您可以在此处阅读有关使用存储在Application对象中的全局变量的更多信息。我不认为单声道会有所作为,这会阻止您使用这种方法。

于 2012-11-29T19:35:00.410 回答