在Android Studio3.4 报错内容:
Can't create handler inside thread that has not called Looper.prepareUnity: AndroidJavaException: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at UnityEngine.AndroidJNISafe.CheckException () [0x00000] in <filename unknown>:0
at UnityEngine.AndroidJNISafe.CallVoidMethod (IntPtr obj, IntPtr methodID, UnityEngine.jvalue[] args) [0x00000] in <filename unknown>:0
at UnityEngine.AndroidJavaObject._Call (System.String methodName, System.Object[] args) [0x00000] in <filename unknown>:0
at UnityEngine.AndroidJavaObject.Call (System.String methodName, System.Object[] args) [0x00000] in <filename unknown>:0
at AndroidSdkImp.Login () [0x00000] in <filename unknown>:0
at XEnterScript.OnLoginFastGame () [0x00000] in <filename unknown>:0
at EventDelegate.Execute () [0x00000] in <filename unknown>:0
at EventDelegate.Execute (System.Collections.Generic.List`1 list) [0x00000] in <filename unknown>:0
at UIButton.OnClick () [0x00000] in <filename unknown>:0
UnityEngine.GameObject:SendMessage(String, Object, SendMessageOpt
例:
错误原因:
直接使用Unity调用第三方接口了
public void Login() {
HuyaBerry.instance().login(MainActivity.this);
}
解决方式:
创建一个UI线程调用
public void Login() {
this.runOnUiThread(new Runnable() {
public void run() {
HuyaBerry.instance().login(MainActivity.this);
}
});
}
//TODO C#中被using(){}包裹的变量不能在using外使用。否则会闪退。
错误例子:
AndroidJavaObject CurrentActivity;
using (var JavaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
{
CurrentActivity = JavaClass.GetStatic<AndroidJavaObject>("currentActivity");
if (CurrentActivity != null)
{
CurrentActivity.Call("Test1", "77777");
}
}
CurrentActivity.Call("Test2");//不要在 using 使用
CurrentActivity.CallStatic("Test3");