将多维数组传递给另一个 activity

Passing a multidimesional array to another activity

我需要将一个多维数组传递给另一个 activity。这就是我希望能够做到的方式:

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 component序列化数组
这是一个序列化和反序列化数组的简单示例

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);
}

您还可以使用应用程序 class 全局存储和检索对象:

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 调用上执行此操作,因为此 class 是在应用程序启动时调用的,因此您不必手动启动它。 请记住,作用域为 Application 的变量的生命周期通过扩展作用于应用程序。 如果 Android 认为有必要,此 class 将被垃圾收集,因此您必须修改代码以包含这种情况。 您可以使用 SharedPreferencesDatabase 保存您的变量以防它们被删除并从应用程序中检索它们 class 以获得更快的结果。

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

研究您需要将哪些信息保存为应用程序范围的状态,以及哪些信息可以简单地直接从您的数据库中检索。两者都有成本影响,您需要确保获得正确的平衡。

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