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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                在java編程語言中有非靜態成員函數和靜態成員函數,JNI允許我們訪問到java中的成員函數,然后再jni中調用,這里我就來舉例說明在jni中是如何做到的。 我們先在java中定義2個成員函數,一個非靜態的,一個是靜態的,分別會把title的textView設置成不同的值: ~~~ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mContext = this; bt1 = (Button)findViewById(R.id.button1); bt2 = (Button)findViewById(R.id.button2); tv = (TextView)findViewById(R.id.tv); tv.setText(""+si); bt1.setOnClickListener(new MyButtonListener()); bt2.setOnClickListener(new MyButtonListener()); } class MyButtonListener implements OnClickListener{ public void onClick(View v) { if(v.getId() == R.id.button1 ){ accessInstanceMethod("Instance Method Call"); } if(v.getId() == R.id.button2 ){ accessInstanceMethod("Static Method Call"); } } } private void InstanceMethod(String str) { tv.setText(str); } private void static StaticMethod(String str) { tv.setText(str); } public native void accessInstanceMethod(String str); public native void accessStaticMethod(String str); ~~~ 我們再來看下jni中是如何處理的: ~~~ void Java_com_android_jni_MyJNI_accessInstanceMethod(JNIEnv *env, jobject obj, jstring jstr) { const jbyte *str; str = (*env)->GetStringUTFChars(env,jstr,NULL); if(str == NULL) return ; __android_log_print(ANDROID_LOG_INFO,"-JNI-","%s",str); (*env)->ReleaseStringUTFChars(env,jstr,str); jclass cls = (*env)->GetObjectClass(env,obj); jmethodID mid = (*env)->GetMethodID(env,cls,"InstanceMethod", "(Ljava/lang/String;)V"); if(mid == NULL) return ; (*env)->CallVoidMethod(env,obj,mid,jstr); } void Java_com_android_jni_MyJNI_accessStaticMethod(JNIEnv *env, jobject obj, jstring jstr) { const jbyte *str; str = (*env)->GetStringUTFChars(env,jstr,NULL); if(str == NULL) return; __android_log_print(ANDROID_LOG_INFO,"-JNI-","%s",str); (*env)->ReleaseStringUTFChars(env,jstr,str); jclass cls = (*env)->GetObjectClass(env,obj); jmethodID mid = (*env)->GetStaticMethodID(env,cls,"StaticMethod", "(Ljava/lang/String;)V"); if(mid == NULL) return ; (*env)->CallStaticVoidMethod(env,obj,mid,jstr); } ~~~ 這邊都比較簡單,先是找到class,然后得到method ID,之后是根據method ID調用JAVA中的function 運行模擬器,點擊不同的按鈕觀察title的textView: ![](https://box.kancloud.cn/2016-08-03_57a197f85c18a.gif) ----------------------------------------------------------------------------------------------------- 調用java的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>

                              哎呀哎呀视频在线观看