2013-06-25 9 views
1

가변 배열 :모노는 안드로이드 바인딩 - 우리는이 같은 방법이있는 자바 라이브러리를 결합하는

void onDataReceived(java.lang.String fromNode, java.lang.String fromChannel, java.lang.String payloadType, byte[][] payload) 

을 주목 byte[][] payload 매개 변수입니다.

System.NotSupportedException: Rectangular arrays are not currently supported. 

이 현재 안드로이드 프로젝트를 바인딩 모노에서 지원됩니다

모든 리스너가 자바에서 발사 될 때, 우리는 오류가 런타임시를 제외하고, 잘 컴파일?

byte[][] 대신 사용할 수있는 다른 유형이 있습니까?

답변

2

Is this currently supported in Mono for Android binding projects?

번호 맞춰 그 문제를 해결해야한다 ...

당신이 payload 매개 변수가 필요하십니까? 그렇지 않은 경우 생성 된 코드 [^ 1]을 편집하여 payload의 마샬링을 제거 할 수 있습니다. 당신이이 payload 매개 변수를 필요로 할 경우

, 당신은 생성 된 코드를 편집하고이 대체 할 수

byte[][] payload = JNIEnv.GetArray<byte[]> (native_payload); 

(적어도, 그 변화가 내 작동이와

byte[][] payload = (byte[][]) JNIEnv.GetArray (native_payload, JniHandleOwnership.DoNotTransfer, typeof (byte[])); 

을 사소한 테스트 [^ 2])

[^ 1] : Ew, 편집 코드 생성.

[^ 2] : 사소한 시험 :. 우리가 실제로 필요

Action<byte[][], byte[][]> equal = (a, b) => { 
     if (!a.SelectMany (_ => _).SequenceEqual (b.SelectMany (_ => _))) 
      throw new InvalidOperationException ("Sequences don't match!\n" + 
        "Expected: " + string.Join (" ", a.SelectMany (_ => _).Select (_ => _.ToString ("x2"))) + 
        " Actual: " + string.Join (" ", b.SelectMany (_ => _).Select (_ => _.ToString ("x2")))); 
}; 
byte[][] data = new byte[][]{ 
    new byte[]{11, 12, 13}, 
    new byte[]{21, 22, 23}, 
    new byte[]{31, 32, 33}, 
}; 
using (var byteArrayArray = new Java.Lang.Object (JNIEnv.NewArray (data), JniHandleOwnership.TransferLocalRef)) { 
    Console.WriteLine ("# jonp [[b: {0}", JNIEnv.GetClassNameFromInstance (byteArrayArray.Handle)); 
    byte[][] data2 = JNIEnv.GetArray<byte[]> (byteArrayArray.Handle); 
    equal (data, data2); 
} 
+0

는'payload', 그것은 우리가 관심있는 데이터이다 나는 추한 뭔가를 할 괜찮아요, 그냥에 접근 할 필요가 'byte [] []'. 나는 당신에게 이메일이나 뭔가를 통해 구속력있는 프로젝트를 보낼 수 있습니다. 가장 좋은 방법은 무엇입니까? (나는 Xamarin 지원 요청도 입력했다.) – jonathanpeppers

+0

참고로, 우리는'byte [] []'를 자바로 전달할 때 잘 동작하는 것 같다. 리스너 일 때가 아니라 자바가'byte [] [ ]'를 C#으로 변환합니다. – jonathanpeppers

+0

간략한 조사에 따르면 런타임 문제를 해결해야합니다. 나는 이것을 4.7.11 alpha release와 future 4.6.10 stable release를 위해 가능한 한 빠르게하려고 노력할 것이다. – jonp