<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                現在我們知道了怎樣使用native code訪問簡單的數據類型和引用參考類型(string,array),下面我們來介紹怎樣讓jni代碼去訪問java中的成員變量和成員函數,然后可以再jni中回調java中的方法。 ------------------------------------------------------------------------------------- Accessing fields java提供2中成員,靜態成員和非靜態成員,JNI支持了怎么樣去get和set這些靜態以及非靜態成員的方法,下面來舉一個例子。 先來訪問非靜態成員。 我們先在類中聲明一個非靜態的成員變量: ~~~ public class MyJNI extends Activity { /**Called when the activity is first created. */ //declear a instance field private String s="123"; ~~~ 在點擊按鈕的時候我們把title的textview的字符串改成s, ~~~ MyJNI mj = new MyJNI(); mj.accessField(); tv.setText(mj.s); ~~~ java代碼很簡單,只要實現我們的功能就好了,下面來看jni是如何進入class中的成員變量的: ~~~ Java_com_android_jni_MyJNI_accessField(JNIEnv *env,jobject obj) { jfieldID fid; jstring jstr; const char *str; //get a reference to obj's class jclass cls = (*env)->GetObjectClass(env,obj); // jclass cls = (*env)->FindClass(env,"com/android/jni/Native"); __android_log_print(ANDROID_LOG_INFO,"-JNI-","here in native C!"); //look for the instance field in cls fid = (*env)->GetFieldID(env,cls,"s", "Ljava/lang/String;"); if(fid == NULL){ __android_log_print(ANDROID_LOG_INFO,"-JNI-","can not find field"); return; } //read the instance field s jstr = (*env)->GetObjectField(env,obj,fid); str = (*env)->GetStringUTFChars(env,jstr,NULL); if(str == NULL) return; (*env)->ReleaseStringUTFChars(env,jstr,str); //create a new string and overwrite the instance field jstr = (*env)->NewStringUTF(env,"abc"); if(jstr == NULL) return; //out of memory (*env)->SetObjectField(env,obj,fid,jstr); } ~~~ 為了訪問目標類中的成員變量,要做2步,首先呼叫GetFieldID從類中來得到一個field ID,根據成員的名字和描述: fid = (*env)->GetFieldID(env,cls,"s", "Ljava/lang/String;"); 然后根據這個field ID來訪問這個成員: jstr = (*env)->GetObjectField(env,obj,fid); 因為在java中string是對象,所以這邊呼叫的是GetObjectField函數。 最后運行模擬器,點擊按鈕的時候textView會變成JNI中修改的“abc” ![](https://box.kancloud.cn/2016-08-03_57a197f8417ab.gif) ok,這部分結束,下面來看如何訪問靜態成員變量。 同樣的java代碼中: ~~~ public class MyJNI extends Activity { /**Called when the activity is first created. */ //declear a instance field private static int si=100; private String s="123"; ~~~ 我們定義一個靜態的整形變量si初始化為100,當我們點擊按鈕的時候通過jni訪問static field來改變si的值,然后再title的textView中顯示出來。 ~~~ MyJNI mj = new MyJNI(); mj.accessStaticField(); tv.setText(mj.si+""); ~~~ 我們來看下如何進入static field: ~~~ void Java_com_android_jni_MyJNI_accessStaticField(JNIEnv *env,jobject obj) { jfieldID fid; //store the field id jint si; //get a reference to obj's class jclass cls = (*env)->GetObjectClass(env,obj); __android_log_print(ANDROID_LOG_INFO,"-JNI-","here in native C!"); //look for the static field si in lcs fid = (*env)->GetStaticFieldID(env,cls,"si","I"); if(fid == NULL) return; //field not found //access the static field si si = (*env)->GetStaticIntField(env,cls,fid); (*env)->SetStaticIntField(env,cls,fid,200); } ~~~ 大家可以看到只是調用的方法不一樣,多了一個static,和非靜態的使用方法一樣。 ------------------------------------------------------------------------------------------------------- jni中訪問class 中的field就到此結束,下面一篇會介紹如何訪問java中class 的method。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看