java - 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
};
}
解决方案
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/
推荐阅读
- kubernetes - 使用其他属性更新 helm 图表
- javascript - Wordpress 自定义 JS 位置
- visual-studio - 创建应用程序包 CompileXaml 时出错
- mysql - MySQL 疯狂(?)浮点行为
- python - 由于需求错误,无法将一些 refs 推送到 Heroku
- laravel - 从控制器的(资源)函数生成路由
- r - 组合两个不同大小和名称的数据框
- reactjs - React TS 扩展运算符
- node.js - 尝试我的后端项目基本实现 dockerize 但无法使节点服务器与数据库交互
- reactjs - 在 React Native 中访问主题颜色