将多维数组传递给另一个活动
本文关键字:另一个 活动 数组 | 更新日期: 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觉得它是必要的,所以你必须修改代码,包括这种情况下也。你可以使用SharedPreferences
或Database
来保存变量,以防它们被删除,并从App类中检索它们,以获得更快的结果。
调查哪些信息需要保存为应用程序范围的状态,哪些信息可以直接从数据库中检索。两者都有成本影响,你需要确保你得到正确的平衡。
并且不要忘记在OnStop
和OnDestroy
上释放需要的资源。