Java Code:
PackageCom.fansen.hellojni;ImportAndroid.annotation.SuppressLint;Importandroid.app.Activity;ImportAndroid.os.Bundle;ImportAndroid.util.Log;ImportAndroid.widget.TextView; Public classMainactivityextendsActivity {@SuppressLint ("Defaultlocale") @Overrideprotected voidonCreate (Bundle savedinstancestate) {Super. OnCreate (savedinstancestate); TextView TV=NewTextView ( This); Tv.settext ("Hello world!" ); String Str=NULL; Diskinfo[] Infos=Stringfromjni (); for(inti = 0; i < infos.length; i++) {String abyte=NULL; if(Integer.tohexstring (Infos[i].value). toUpperCase (). Length () = = 1) {Abyte= "0" +integer.tohexstring (Infos[i].value). toUpperCase (); LOG.I ("TAG", "infos[" + i + "].value:" + "0" +integer.tohexstring (Infos[i].value). toUpperCase ()); }Else{abyte=integer.tohexstring (Infos[i].value). toUpperCase (); LOG.I ("TAG", "infos[" + i + "].value:" +integer.tohexstring (Infos[i].value). toUpperCase ()); } if(str = =NULL) {str=Abyte; }Else{str= str +Abyte; }} log.i ("TAG", "str:" +str); Setcontentview (TV); } Public nativediskinfo[] Stringfromjni (); Static{system.loadlibrary ("Hello-jni"); }}classdiskinfo{ Public intdata; Public intvalue; Public intNumber ; }
C Code:
#include <string.h>#include<jni.h>typedefstruct{ intdata; intvalue; intNumber ;} Diskinfo;jobjectarray Java_com_fansen_hellojni_mainactivity_stringfromjni (jnienv*env, Jobject thiz) {Jclass Clsdiskinfo= (*env)->findclass (env,"Com/fansen/hellojni/diskinfo"); Jobjectarray infos= (*env)->newobjectarray (env,Ten, Clsdiskinfo, NULL); Jfieldid Dataid= (*env)->getfieldid (env, Clsdiskinfo,"Data","I"); Jfieldid ValueID= (*env)->getfieldid (env, Clsdiskinfo,"value","I"); Jfieldid Numberid= (*env)->getfieldid (env, Clsdiskinfo," Number","I"); Jmethodid consid= (*env)->getmethodid (env, Clsdiskinfo,"<init>","() V"); unsignedCharsend[Ten] = {0xFF,0x1F,0x07,0x08,0x00,0x00,0x01,0x02}; intsendcopy[Ten] = {0}; intJ; for(j =0; J <=8; J + +) {Sendcopy[j]=Send[j]; } inti; Jobject obj; for(i =0; I <Ten; i++) {obj= (*env)NewObject (env, Clsdiskinfo, consid); (*ENV)Setintfield (env, obj, Dataid, (jint) i); (*ENV)Setintfield (env, obj, ValueID, (Jint) sendcopy[i]); (*ENV)Setintfield (env, obj, Numberid, (jint) i); (*ENV)setobjectarrayelement (env, infos, I, obj); } returninfos;}
JNI c Returns an array of objects to Java