2016-04-15 2 views
0

Hier ist mein Code. Und ich bin immer Fehler AndroidJavaException nicht Handler Innengewinde erstellen können, die nicht looper.prepare in Unity bei activity.Call (runOnUiThread)AndroidJavaException kann keinen Handler innerhalb des Threads erstellen, der looper.prepare in Unity nicht aufgerufen hat

public static void showToast(string text) 
     { 
      if (Application.platform == RuntimePlatform.Android) 
      { 
       AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
       AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); 
       AndroidJavaClass Toast = new AndroidJavaClass("android.widget.Toast"); 
       AndroidJavaObject javaString = new AndroidJavaObject("java.lang.String", text); 
       AndroidJavaObject context = activity.Call<AndroidJavaObject>("getApplicationContext"); 
       AndroidJavaObject toast = Toast.CallStatic<AndroidJavaObject>("makeText", context, javaString, Toast.GetStatic<int>("LENGTH_SHORT")); 
       activity.Call("runOnUiThread", new AndroidJavaRunnable(()=> { toast.Call("show"); })); 
      } 
     } 

wenn ich Lösung Bitte angerufen hat help.What ich tue wrong.Thanks im Voraus

+0

Sie haben eine Lösung, um diesen Fehler zu beheben.Wenn Sie eine Lösung haben Bitte helfen.Was mache ich falsch.Vielen Dank im Voraus –

Antwort

2

das Problem ist, dass die Einheit Spieler im Thread läuft das nicht ein Looper hat, dies alles bedeutet, dass Handler/Looper erfordert muss auf UI-Thread ausgeführt werden, in Ihrem Fall

  activity.Call("runOnUiThread", new AndroidJavaRunnable(()=> 
     { 
      AndroidJavaClass Toast = new AndroidJavaClass("android.widget.Toast"); 
      AndroidJavaObject javaString = new AndroidJavaObject("java.lang.String", text); 
      AndroidJavaObject context = activity.Call<AndroidJavaObject>("getApplicationContext"); 
      AndroidJavaObject toast = Toast.CallStatic<AndroidJavaObject>("makeText", context, javaString, Toast.GetStatic<int>("LENGTH_SHORT")); 
      toast.Call("show"); } 
     )); 

Or vielleicht nur makeText teil

+0

Kann ich weitere Informationen haben? Ich kann den Thread eines Unity-Spielers nicht finden und habe keinen Looper. –

0

UnityPlayer erstellt nur eine Aktivität für die gesamte App. und es läuft auf einem Hintergrund Thread, der keinen looper hat. Also alles, was Handler/Looper benötigt, muss im UI-Thread ausgeführt werden.

public static void showToast(string text) 
{ 
    if (Application.platform == RuntimePlatform.Android) 
    { 
     AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
     AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); 
     AndroidJavaClass Toast = new AndroidJavaClass("android.widget.Toast"); 
     AndroidJavaObject javaString = new AndroidJavaObject("java.lang.String", text); 
     AndroidJavaObject context = activity.Call<AndroidJavaObject>("getApplicationContext"); 
     activity.Call("runOnUiThread", new AndroidJavaRunnable(()=> { 
      AndroidJavaObject toast = Toast.CallStatic<AndroidJavaObject>("makeText", context, javaString, Toast.GetStatic<int>("LENGTH_SHORT")); 
      toast.Call("show"); })); 
       } 
      } 
Verwandte Themen