2016-09-21 11 views
1

C#のJavaプラグイン例外を処理しますか?

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

Javaでdivide(10、0)を呼び出すと、明らかに例外が生成されます。しかし、例外はUnity3Dコードで捕らえることができますか?ありがとう!

答えて

2

まず、jo.Call<int>("divide", new object[](10, 0));はコンパイルしないでください。それはjo.Call<int>("divide", new object[] { 10, 0 });でなければなりません。

ただし、例外はUnity3Dコードでキャッチすることはできますか?

Androidのネイティブ側からスローされた例外がある場合は、あなたのアプリが強制終了されます。

例えば、以下のコード:戻り型またはパラメータが一致しない場合、またはdivide関数で、全て存在しない場合であっても場合

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

は唯一の例外をキャッチします。

Java側からExceptionをキャッチする必要があります。

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

あなたは、C#1に結果を返し、その後JSONObjectとJSONに例外を変換し、例外をキャッチし、stringに関数の戻り値の種類を変更し、JsonUtility

+0

おかげで、さらに多くのを使用して、各データを取得することができますどのタイプを返すようにアドバイスしますか、jsonオブジェクトかjsonオブジェクトにデシリアライズできる文字列ですか?ところで、私はAndroidJavaClassについて疑問を持っています。 JNIの実装またはアプリケーションですか?彼らの関係は何ですか?ありがとう:) – Niubility

+0

私はあなたが結果とエラーを取得するために使用するオブジェクトJsonUtility **ではない**文字列を返す必要がありますと思う。 'AndroidJavaClass'に関しては、どのように実装されているのかわかりません。申し訳ありません – Programmer