首页 > 解决方案 > 如何将自定义类对象从 Unity C# 传递到 Android 插件的 Java 代码?

问题描述

我是使用 Unity Android 插件的新手。我AlertDialog在 Android Studio 中制作了一个本机,并使用 Unity Android 插件使用它。我还可以输入用户名EditText,当用户单击OK时,用户名按钮 ID将发送到 Unity C# 代码。因此,我需要从 Native Android Java 代码返回的 2 个值。AlertDialog

因此,我在 Unity C# 中创建了一个类,在 Android Studio 中创建了一个相应的 Java 类。但我收到一个错误。

Exception: No such proxy method: AlertViewCallback.onButtonTapped(UnityEngine.AndroidJavaObject)

这是我的 Unity C# 代码

public class UserValues
{
    public int buttonIndex;
    public string inputText;
}

public class AlertViewCallback : AndroidJavaProxy
{
    const string pluginName = "com.mycompany.pluginexample.MyPlugin";

    private Action<UserValues> alertHandler;
    public AlertViewCallback(Action<UserValues> alertHandlerIn) : base(pluginName + "$AlertViewCallback")
    {
        alertHandler = alertHandlerIn;
    }

    public void onButtonTapped(UserValues userValues)
    {
        Debug.Log("Button tapped: " + userValues.buttonIndex + ", Username: " + userValues.inputText);
        if (alertHandler != null)
            alertHandler(userValues);
    }
}

public Action<UserValues> EdiTextDialog = (UserValues userValues) =>
{
    Debug.Log("Got Index: " + userValues.buttonIndex + ", Username: " + userValues.inputText);
};

public void CallNativeAndroidDialog()
{
    PluginInstance.Call("showAlert", new object[] { new AlertViewCallback(EdiTextDialog) });
}

这是我的 Java 代码

public class UserValues 
{
    public int buttonIndex;
    public String inputText;
}

public class MyPlugin 
{
    public interface AlertViewCallback 
    {
        public void onButtonTapped(UserValues userValues);
    }

    public void showAlert(final AlertViewCallback callback)
    {
        DialogInterface.OnClickListener dialogOnClickListener = new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int id) {
                dialogInterface.dismiss();

                UserValues userValues = new UserValues();
                userValues.buttonIndex = -2;
                userValues.inputText = "James";

                callback.onButtonTapped(userValues);
            }
        };
    }
}

我能够打开和关闭本机对话框。只有当我点击Dialog上的Button时才会遇到Exception,也就是onButtonTapped(UserValues userValues)被调用的时候。

请注意,当我仅使用整数值(onButtonTapped(int id)onButtonTapped(int id, String Username), then also it is working我只在使用任何自定义类的对象时遇到问题,例如UserValues.

如何将任何自定义类的对象从 Unity C# 传递到 Android 插件的 Java 代码?

标签: javac#androidunity3d

解决方案


推荐阅读