java - 将多维数组传递给另一个 Activity

标签 java c# android xamarin xamarin.android

我需要将一个多维数组传递给另一个 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);
}

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

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

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

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

关于java - 将多维数组传递给另一个 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33065402/

相关文章:

android - 在 cordova 中更新时删除预填充的 sqlite 数据库

android - 如何在 apk 文件中找到用于机器人测试的主要 Activity

java - 在这种情况下,我如何处理 Function<T, R> 和省略号/可变参数?

java - 如何返回字符串,并将字符串的所有实例替换为另一个字符串(Java)

java - 计算 Pi Java 程序

c# - 在本地时区格式化 UTC 时间戳

java - @Autowired 注释无法在 JUnit 类中注入(inject) bean

c# - 将字符串更改为第一个字符大写,其余字符小写

c# - 如何将非托管 IntPtr 类型转换为 C# 字符串?

android - 在 android studio 中安装 Mapbox 的问题