将多维数组传递给另一个活动

本文关键字:另一个 活动 数组 | 更新日期: 2023-09-27 18:17:13

我需要传递一个多维数组给另一个活动。下面是我希望能够做到的:

int[,,] aMultidimensionalArray = new int[a,b,c];
Intent intent = new Intent(this.Activity, typeof(outputActivity));
intent.PutExtra("array", aMultidimensionalArray);
StartActivity(intent);

但是编译器说aMultidimesionalArray是不可序列化的。这导致我不得不使用int[][][]来声明数组,然后导致其他代码中的一大堆其他问题。

将多维数组传递给另一个活动

使用这个Json。. NET组件来序列化数组
下面是序列化和反序列化数组

的简单示例
using Newtonsoft.Json;
...
public class Person
{
    public string Name { get; set; }
    public DateTime Birthday { get; set; }
}
void PersonToJsonToPersonExample ()
{
    var person = new Person { Name = "Bob", Birthday = new DateTime (1987, 2, 2) };
    var json = JsonConvert.SerializeObject (person);
    Console.WriteLine ("JSON representation of person: {0}", json);
    var person2 = JsonConvert.DeserializeObject<Person> (json);
    Console.WriteLine ("{0} - {1}", person2.Name, person2.Birthday);
}

您还可以使用Application类全局存储对象并检索它们:

using Android.Runtime;
namespace SomeName
{
[Application]
public class App : Application
{
    public string Name { get; set;}
    public App (IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
    {
    }
    public override void OnCreate ()
    {
        base.OnCreate ();
        Name = "";
    }
}
}

您可以使用:

访问数据
App application = (App)Application.Context;
application.Name = "something";

我选择在Application类上这样做,因为这个类在应用程序启动时被调用,所以你不必手动启动它。请记住,范围为Application的变量通过扩展将其生命周期范围限定在应用程序中。这个类将被垃圾收集,如果Android觉得它是必要的,所以你必须修改代码,包括这种情况下也。你可以使用SharedPreferencesDatabase来保存变量,以防它们被删除,并从App类中检索它们,以获得更快的结果。

但是,在使用这种方法时不要过度浪费,因为在该类上附加太多信息可能会导致性能下降。只添加您知道应用程序的不同部分将需要的信息,并且检索该信息的成本超过将其存储为应用程序变量的成本。

调查哪些信息需要保存为应用程序范围的状态,哪些信息可以直接从数据库中检索。两者都有成本影响,你需要确保你得到正确的平衡。

并且不要忘记在OnStopOnDestroy上释放需要的资源。