在Android活动之间高效传递自定义对象数据[Mono Android]

我已经为此搁置了一段时间了。 我正在开发一款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;

所以我从来没有真正听说过这种方法,我不确定这将贯穿整个应用程序过程(我觉得要么通过序列化来加载数据,要么这样,这就是我想要的应用程序待办事项:

第一个活动是主菜单,并且在屏幕加载时必须完成以下操作:

  • 如果找到一个设置文件,使用序列化加载一个以前的FishingData对象(我知道如何做到这一点)
  • 如果没有,然后创建一个新的干净的FishingData对象以后保存(我也知道这一点)
  • 所以现在我们有了一个FishingData对象,我如何确保我不必在每个活动中重复步骤1-2。 我怎样才能以某种方式将FishingData对象传递给下一个活动,并确保它在应用程序仍然存在的同时生活。 我只想加载一次(通过序列化) (< - 不知道如何做到这一点),并保存它只有当用户添加数据到这个对象(我知道该怎么做)。
  • 任何帮助将不胜感激。 这听起来似乎弄不清楚。 这似乎是一件很平常的事情,但我一直没有找到任何详细的信息。


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


    以下是我如何通过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。 所以说你有一个渔夫对象,它包含另一个叫做tacklebox的对象。 如果您继续嵌套模型,您还将为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步,但我建议将你的3个步骤中的每一步都分解成自己的问题,因为你试图做的事情比一个问题稍长一些

    链接地址: http://www.djcxy.com/p/66685.html

    上一篇: Efficiently Passing Custom Object Data between Android Activities [Mono Android]

    下一篇: Tycho downloads p2.indexes on every build