首页 > 解决方案 > Java 中的 Creator 是什么以及如何将其转换为 C#

问题描述

我正在将代码从 Java 转换为 C#/Xamarin,但我无法理解下面提到的代码

public static class GraphicPath implements Parcelable
{
    protected GraphicPath(Parcel par)
    {
        int size=in.readInt();
        int[] x=new int[size];
        int[] y=new int[size];
        in.readIntArray(x);
        in.readIntArray(y);
        pathX=new ArrayList<>();
        pathY=new ArrayList<>();

        for (int i=0;i<x.length;i++){
            pathX.add(x[i]);
        }

        for (int i=0;i<y.length;i++){
            pathY.add(y[i]);
        }
    }

    //Unable to understand and translate the below code.
    public static final Creator<GraphicPath> CREATOR = new Creator<GraphicPath>() {
       @Override
        public GraphicPath createFromParcel(Parcel in) {
            return new GraphicPath(in);
        }

        @Override
        public GraphicPath[] newArray(int size) {
            return new GraphicPath[size];
        }
   };
}

它是什么以及如何将其转换为 C#,以及如何将 Java 处理程序代码转换为 C#?处理程序是线程吗?如何将以下处理程序转换为 C#

 Handler handler = new Handler(Looper.getMainLooper());

 new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
                @Override
                public void run() {
                    startCapture();
                }
            },1000);

handler.post(new Runnable() {
            @Override
            public void run() {
                toCapture();
            }
        });
        return;

转换后的 C# 代码出错,C# 代码实现了 IParcelable 接口,并且其中没有 Creator。

 public class GraphicPath : IParcelable
{
    protected GraphicPath(Parcel par)
    {
        int size =par.ReadInt();
        int[] x = new int[size];
        int[] y = new int[size];
        par.ReadIntArray(x);
        par.ReadIntArray(y);
        pathX = new List<int>();
        pathY = new List<int>();

        for (int i = 0; i < x.Length; i++)
        {
            pathX.Add(x[i]);
        }

        for (int i = 0; i < y.Length; i++)
        {
            pathY.Add(y[i]);
        }
    }

    //Red lines here
    public static Creator<GraphicPath> CREATOR = new Creator<GraphicPath>() {

        //paste here
    };
  }

标签: javac#androidxamarinxamarin.android

解决方案


Creator 用于 Parcelable,Parcelable 用于序列化类以通过 Intents 在活动之间传递它们,因此您必须遵循此文档https://developer.xamarin.com/api/type/Android.OS.Parcelable/ 如何在 Xamarin 中使用它们

public class MyParcelable implements Parcelable {
     private int mData;

     public int describeContents() {
         return 0;
     }

     public void writeToParcel(Parcel out, int flags) {
         out.writeInt(mData);
     }

     public static final Parcelable.Creator<MyParcelable> CREATOR
             = new Parcelable.Creator<MyParcelable>() {
         public MyParcelable createFromParcel(Parcel in) {
             return new MyParcelable(in);
         }

         public MyParcelable[] newArray(int size) {
             return new MyParcelable[size];
         }
     };

     private MyParcelable(Parcel in) {
         mData = in.readInt();
     }
 }

对于处理程序,您还必须检查此文档https://developer.xamarin.com/api/type/Android.OS.Handler/


推荐阅读