e.g。
Android部分
public class MainActivity extends UnityPlayerActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public int divide(int a, int b) throw Exception{
return a / b;
}
}

Unity3D部分:
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
int rlt = jo.Call<int>("divide", new object[](10, 0));
&#13;
显然,在Java中调用divide(10,0)时会产生异常。但是,可以在Unity3D代码中捕获异常吗?谢谢!
答案 0 :(得分:2)
首先,jo.Call<int>("divide", new object[](10, 0));
甚至不应该编译。那应该是jo.Call<int>("divide", new object[] { 10, 0 });
。
但是,可以在Unity3D代码中捕获异常吗?
否强>
如果从Android原生端引发异常,您的应用将被终止。
例如,下面的代码:
AndroidJavaClass jc;
AndroidJavaObject jo;
int rlt;
try
{
jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
rlt = jo.Call<int>("divide", new object[] { 10, 0 });
}
catch (Exception e)
{
Debug.Log("Error: " + e.Message);
}
如果返回类型或参数不匹配,或者即使divide
函数根本不存在,也只会捕获异常。
你必须从Java端捕获异常。
public int divide(int a, int b)
{
int result = 0;
try
{
result = _divide(a, b);
}catch(Exception e)
{
//...
}
return result;
}
public int _divide(int a, int b) throw Exception{
return a / b;
}
您可以将函数返回类型更改为string
,捕获异常,将异常转换为带有JSONObject
的json,然后将结果返回到C#并使用JsonUtility
<获取每个数据/ p>