Chr*_*Sim 5 c# java android xamarin.android xamarin
我正在尝试使用Iserializable在Android中传递对象,但它返回"无法从本机句柄激活类型的实例"异常.
以下是我的代码.
[FBUserParcel.cs]
using System;
using Android.OS;
using PlayCardLeh.Helpers;
namespace PlayCardLeh.Android
{
public class FBUserParcel:Java.Lang.Object, Java.IO.ISerializable
{
Xamarin.Facebook.Model.IGraphUser fbUser;
public FBUserParcel (Xamarin.Facebook.Model.IGraphUser user)
{
fbUser = user;
}
}
}
Run Code Online (Sandbox Code Playgroud)
[MainActivity.cs]
private async Task FindFBUser(Xamarin.Facebook.Model.IGraphUser user) {
if (user != null) {
Console.WriteLine ("GOT USER: " + user.Name);
try {
var t = await User.FindUserWithFBID (user);
}
catch(NotFound NotFound) {
RunOnUiThread (() => {
Intent i = new Intent (this,typeof (RegisterActivity));
FBUserParcel u = new FBUserParcel(user);
StartActivity (i);
});
}
}
else
Console.WriteLine ("Failed to get 'me'!");
}
Run Code Online (Sandbox Code Playgroud)
RegisterActivity.cs
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
SetContentView (Resource.Layout.Register);
if (Intent.HasExtra ("fbUser")) {
var u = Intent.Extras;
u.GetSerializable ("fbUser");
}
}
Run Code Online (Sandbox Code Playgroud)
例外发生在"u.GetSerializable("fbUser");".对不起,我是Xamarin的新手,任何人都有使用Iserializable的经验吗?我在"FBUserParcel.cs"中错过了什么?
感谢Mug4n分享讨论同一问题的链接. http://forums.xamarin.com/discussion/451/communicate-with-iserializable
那么你可以通过序列Xamarin.Facebook.Model.IGraphUser
化生成string
或生成的任何序列化器来轻松解决它byte[]
.
例如,如果您使用Newtonsoft的Json.NET组件,您的代码将如下所示:
Xamarin.Facebook.Model.IGraphUser fbUser;
var fbUserSerialized = JsonConvert.SerializeObject (fbUser);
intent.PutExtra ("fbUser");
Run Code Online (Sandbox Code Playgroud)
并反序列化:
if (Intent.HasExtra ("fbUser")) {
var fbUserSerialized = Intent.GetStringExtra ("fbUser");
var fbUser = JsonConvert.DeserializeObject<Xamarin.Facebook.Model.IGraphUser>(fbUserSerialized);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1459 次 |
最近记录: |