2016-06-01 7 views
0

Android Studioで作成したアプリケーションにXamarinで作成したオブジェクトを送信しようとしています。しかし、私はClassLoaderが見つかりませんでした。クラスローダは間違いなくオブジェクトに送信されている(私はbundle.SetClassLoader(MyObject.Class.ClassLoader)を使用しています。私は、問題が一つはC#で、他の一方で、Javaで書かれているので、クラスが各プラットフォームで異なっているという事実に由来だと思います。どのように私はクラスが言語の違いにかかわらず同じであることを確認します。ここAndroidスタジオアプリケーションのXamarin.Androidアプリケーションからオブジェクトのデマーレーションを解除するにはどうすればいいですか?

がJavaクラスである:?

import android.os.Parcel; 
import android.os.Parcelable; 
public class Person implements Parcelable { 
private String firstName; 
private String lastName; 
private int age; 
public int describeContents() 
{ 
    return 0; 
} 
public void writeToParcel(Parcel dest,int flags) 
{ 
    dest.writeString(firstName); 
    dest.writeString(lastName); 
    dest.writeInt(age); 
} 
public String getName() 
{ 
    return firstName +" " + lastName; 
} 
public int getAge() 
{ 
    return age; 
} 

public static final Parcelable.Creator CREATOR = new Parcelable.Creator(){ 
    public Person createFromParcel(Parcel in){ 
     return new Person(in); 
    } 
    public Person[] newArray(int size) 
    { 
     return new Person[size]; 
    } 
}; 
public Person(Parcel in) 
{ 
    firstName = in.readString(); 
    lastName = in.readString(); 
    age = in.readInt(); 
} 

} 、ここでは、C#クラスである:で

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Android.App; 
using Android.Content; 
using Android.OS; 
using Android.Runtime; 
using Android.Views; 
using Android.Widget; 
using Java.Interop; 
using Object = Java.Lang.Object; 

namespace Greetings.Droid 
{ 
    public class Person : Object,IParcelable 
{ 
    [ExportField("Creator")] 
    public static CREATOR InitializeCreator() 
    { 
     return new CREATOR(); 
    } 
    public String firstName { get; set; } 
    public String lastName { get; set; } 
    public int age { get; set; } 
    public Person(String firstName, String lastName, int age) 
    { 
     this.firstName = firstName; 
     this.lastName = lastName; 
     this.age = age; 

    } 
    public String getName() 
    { 
     return firstName + " " + lastName; 
    } 
    public int getAge() 
    { 
     return age; 
    } 

    public void WriteToParcel(Parcel dest, ParcelableWriteFlags flags) 
    { 
     dest.WriteString(firstName); 
     dest.WriteString(lastName); 
     dest.WriteInt(age); 
    } 
    public int DescribeContents() 
    { 
     return 0; 
    } 

} 


public class CREATOR: Object,IParcelableCreator 
{ 
    public Object CreateFromParcel(Parcel source) 
    { 
     return new Person(source.ReadString(), source.ReadString(),source.ReadInt()); 

    } 
    public Object[] NewArray(int size) 
    { 
     return new Object[size]; 
    } 
} 
} 

答えて

0

Xamarinを使用して明示的に設定するJavaの使用中parcelableクラス

[Register("com.google.xxx.yyy.MyParcelableClass")] 
class MyParcelableClass: Java.Lang.Object, IParcelable 
{ 
... 
} 

の名前に対応するパッケージ

package com.google.xxx.yyy.MyParcelableClass; 
public class MyParcelableClassimplements Parcelable 
{ 
    ... 
} 

とProGuardのルールでは、あなたが持っていることを確認してください

-dontobfuscate 
関連する問題