2016-06-01 3 views
0

Ich versuche, ein in Xamarin erstelltes Objekt an meine in Android Studio erstellte Anwendung zu senden. Ich stoße jedoch auf das Problem von ClassLoader Not Found. Der ClassLoader wird definitiv mit dem Objekt gesendet (ich benutze bundle.SetClassLoader (MyObject.Class.ClassLoader).) Ich denke, das Problem rührt von der Tatsache her, dass die Klassen in jeder Plattform unterschiedlich sind, weil eines in Java geschrieben ist, während das andere in C# ist. . Wie stelle ich sicher, dass die Klassen die gleiche trotz der sprachlichen Unterschiede sindWie kann man ein Objekt von einer Xamarin.Android-Anwendung in einer Android Studio-Anwendung demarkieren?

hier ist die Java-Klasse ist:

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(); 
} 

} und hier ist die C# Klasse:

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]; 
    } 
} 
} 

Antwort

0

In Verwenden Sie Xamarin Register, um explizit festzulegen Namen parcel Klasse

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

in Java-Anwendung entsprechendes Paket

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

und sicherstellen, dass Sie in proguard Regeln

-dontobfuscate 
Verwandte Themen