2016-04-15 16 views
0

ここに私のコードです。そして、私は解決策を持っている場合activity.Callでユニティでlooper.prepareと呼ばれていないAndroidJavaExceptionは、スレッド内のハンドラを作成することはできませんエラー(runOnUiThread)AndroidJavaExceptionはUnity内でlooper.prepareを呼び出していないスレッド内でハンドラを作成できません

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"); })); 
      } 
     } 

を取得してください午前help.What私は事前にwrong.Thanksをしています

+0

あなたはこのエラーを解決する解決策を持っています。解決策を教えてください。私は間違っています。事前にお礼します –

答えて

2

問題は、これはあなたのケースでは、UIスレッド上で実行する必要がありハンドラ/ルーパーが必要で何を意味ユニティ・プレイヤーがインクルードがルーパーを持っていないスレッドで実行されることである

  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"); } 
     )); 

か多分ちょうどmakeText部分

+0

私はより多くの情報を持っていますか?私はユニティプレーヤーのスレッドを見つけることができず、ルーパーを持っていません。 –

0

UnityPlayerはアプリ全体に対して1つのアクティビティしか作成しません。ルーパーを持たないバックグラウンドスレッド上で動作します。 したがって、handler/looperを必要とするものはUIスレッド上で実行する必要があります。

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"); })); 
       } 
      } 
関連する問題