Android 使用Visual Studio从Xamarin中的活动获取对象结果
我想通过Visual Studio 2015从Xamarin中的子活动接收一个对象:Android 使用Visual Studio从Xamarin中的活动获取对象结果,android,visual-studio,android-activity,xamarin,onactivityresult,Android,Visual Studio,Android Activity,Xamarin,Onactivityresult,我想通过Visual Studio 2015从Xamarin中的子活动接收一个对象: [Serializable] class MyObj { public string value { get; } public MyObj(string v) { value = v; } } 儿童活动 Intent myIntent = new Intent (this, typeof(FirstActivity)); MyObj obj = new M
[Serializable]
class MyObj
{
public string value { get; }
public MyObj(string v)
{
value = v;
}
}
儿童活动
Intent myIntent = new Intent (this, typeof(FirstActivity));
MyObj obj = new MyObj("message");
myIntent.PutExtra ("obj", obj); // cannot convert "obj" to Bundle
SetResult (Result.Ok, myIntent);
Finish();
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
if (requestCode == 0)
if (resultCode == Result.Ok) {
var helloLabel = FindViewById<TextView> (Resource.Id.helloLabel);
MyObj obj = data.GetSerializableExtra("obj") as MyObj;
helloLabel.Text = obj.Text.ToString();
}
}
}
FirstActivity
Intent myIntent = new Intent (this, typeof(FirstActivity));
MyObj obj = new MyObj("message");
myIntent.PutExtra ("obj", obj); // cannot convert "obj" to Bundle
SetResult (Result.Ok, myIntent);
Finish();
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
if (requestCode == 0)
if (resultCode == Result.Ok) {
var helloLabel = FindViewById<TextView> (Resource.Id.helloLabel);
MyObj obj = data.GetSerializableExtra("obj") as MyObj;
helloLabel.Text = obj.Text.ToString();
}
}
}
我想得到一些建议。我是Xamarin的新手,正在使用Visual Studio 2015传递复杂对象有点棘手。您可以使用库,例如在发送之前序列化为字符串,然后在另一端反序列化
myIntent.PutExtra ("obj", JsonConvert.SerializeObject(obj));
//在您的接收活动中,OnActivityResult
var objectAsString = intent.GetStringExtra("obj")
var result = JsonConvert.DeserializeObject<MyObject>(objectAsString)
var objectAsString=intent.GetStringExtra(“obj”)
var result=JsonConvert.DeserializeObject(objectAsString)
很好、简单的解决方案,性能也很好。我总是选择
Parcelable
。非常快!(快10倍)
以下是如何在Xamarin中实现它:
public class MyObj : Java.Lang.Object, IParcelable
{
public string Value { get; set; }
public MyObj()
{
}
private MyObj(Parcel parcel)
{
// read your values in order
Value = parcel.ReadString();
}
public void WriteToParcel(Parcel dest, ParcelableWriteFlags flags)
{
// read your values in order
dest.WriteString(Value);
}
// -- stuff below here is needed from the parcel interfaces/mechanism --
[ExportField("CREATOR")]
public static MyObjCreator InitializeCreator()
{
return new MyObjCreator();
}
public class MyObjCreator : Java.Lang.Object, IParcelableCreator
{
public Java.Lang.Object CreateFromParcel(Parcel source)
{
return new MyObj(source);
}
public Java.Lang.Object[] NewArray(int size)
{
return new MyObj[size];
}
}
public int DescribeContents()
{
return 0;
}
}
SetResult
Intent myIntent = new Intent(this, typeof(FirstActivity));
MyObj obj = new MyObj {Value = "Hello"};
myIntent.PutExtra("obj", obj);
SetResult(Result.Ok, myIntent);
Finish();
var x = (MyObj)data.GetParcelableExtra("obj");
OnActivityResult
Intent myIntent = new Intent(this, typeof(FirstActivity));
MyObj obj = new MyObj {Value = "Hello"};
myIntent.PutExtra("obj", obj);
SetResult(Result.Ok, myIntent);
Finish();
var x = (MyObj)data.GetParcelableExtra("obj");
我怎样才能取回这个东西?