我需要将一个多维数组传递给另一个 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 认为有必要,此类将被垃圾收集,因此您必须修改代码以包含这种情况。
您可以使用 SharedPreferences
或 Database
来保存您的变量以防它们被删除并从 App 类中检索它们以获得更快的结果。
不过,在使用这种方法时不要过度浪费,因为在此类上附加过多信息可能会导致性能下降。仅添加您知道应用程序的不同部分将需要的信息,并且检索该信息的成本超过将其存储为应用程序变量的成本。
调查您需要将哪些信息保存为应用程序范围的状态,以及哪些信息可以简单地直接从您的数据库中检索。两者都会产生成本影响,您需要确保取得正确的平衡。
并且不要忘记在 OnStop
和 OnDestroy
上根据需要释放资源。
关于java - 将多维数组传递给另一个 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33065402/