cocos2dxのandroid連携(jni)でカスタムクラスが入った配列を渡したいです。
渡したいデータ
本当は複数行にしたいけど、エラーが出るので、
java
1array = { 2 SampleInit{name->'a', level->1234}, 3 SampleInit{name->'b', level->2345}, 4 SampleInit{name->'c', level->3456} 5 };
とりあえず一行で今ためしてます。
java
1array = { 2 SampleInit{name->'a', level->1234} 3 };
SampleInitの中身はこんな感じです
java
1public class SampleInit { 2 public String name = ""; 3 public int level = 0; 4}
以下文字列配列を参考にして
https://teratail.com/questions/33572
以下の通りjniのコードを書いたのですが、
cpp
1 JNIEXPORT void JNICALL Java_jp_co_sample_SampleActivityBridge_onSampleInitLoaded(JNIEnv *env, jclass clazz, jobjectArray jsampleInits) 2 { 3 std::vector<CCSample*> sampleInit; 4 CCSampleRequestDelegate* listener = CCSampleRequest::getDelegate(); 5 if (listener != NULL) { 6 int length1 = env->GetArrayLength(jsampleInits); // ここが1であることは確認済み 7 jobjectArray jsampleInit = (jobjectArray)env->GetObjectArrayElement(jsampleInits, 0); 8 int length2 = env->GetArrayLength(jsampleInit); // ここでエラーになる(cocosビルドは通るけど、android-studioでbuildするとエラーになる) 9 /* ここいこうはまだ試してない 10 char *localArray; 11 localArray = (char *)malloc(sizeof(char)*3*3); 12 int i=0; 13 int j=0; 14 for(i=0; i<length1; i++){ 15 //jobjectArray oneDim= (jobjectArray)(*env)->GetObjectArrayElement(env, jsampleInit, i); 16 //jchar *element = (*env)->GetCharArrayElements(env, oneDim, 0); 17 for(j=0; j<length2; j++){ 18 //localArray[i*length2+j] = element[j]; 19 //printf("%c",localArray[i*length2+j]); 20 } 21 } 22 */
エラーはこのようになってます。
JNI WARNING: GetArrayLength: jarray arg has wrong type (expected array, got Ljp/co/sample/SampleInit;) 04-06 12:30:42.298 30285-30285/jp.co.sample.ccsample W/dalvikvm: in Ljp/co/sample/SampleActivityBridge;.onSampleLoaded:([Ljp/co/sample/SampleInit;)V (GetArrayLength) 04-06 12:30:42.298 30285-30285/jp.co.sample.ccsample I/dalvikvm: "main" prio=5 tid=1 RUNNABLE

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/07 06:50