首頁 資料庫 mysql教程 学习android JNI的那些事儿--------5. Field & Method --&g

学习android JNI的那些事儿--------5. Field & Method --&g

Jun 07, 2016 pm 03:31 PM
android jni 學習

在java编程语言中有非静态成员函数和静态成员函数,JNI允许我们访问到java中的成员函数,然后再jni中调用,这里我就来举例说明在jni中是如何做到的。 我们先在java中定义2个成员函数,一个非静态的,一个是静态的,分别会把title的textView设置成不同的: pu

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


-----------------------------------------------------------------------------------------------------

调用java的method就介绍到这,关于别的返回值的函数大家可以自己去尝试,用法都是差不多的。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

新報告對傳聞中的三星 Galaxy S25、Galaxy S25 Plus 和 Galaxy S25 Ultra 相機升級進行了嚴厲的評估 新報告對傳聞中的三星 Galaxy S25、Galaxy S25 Plus 和 Galaxy S25 Ultra 相機升級進行了嚴厲的評估 Sep 12, 2024 pm 12:23 PM

新報告對傳聞中的三星 Galaxy S25、Galaxy S25 Plus 和 Galaxy S25 Ultra 相機升級進行了嚴厲的評估

三星 Galaxy S25 Ultra 洩漏了第一張渲染圖,傳聞中的設計變化被曝光 三星 Galaxy S25 Ultra 洩漏了第一張渲染圖,傳聞中的設計變化被曝光 Sep 11, 2024 am 06:37 AM

三星 Galaxy S25 Ultra 洩漏了第一張渲染圖,傳聞中的設計變化被曝光

IFA 2024 | TCL 的 NXTPAPER 14 在性能上無法與 Galaxy Tab S10 Ultra 相媲美,但在尺寸上幾乎可以與之媲美 IFA 2024 | TCL 的 NXTPAPER 14 在性能上無法與 Galaxy Tab S10 Ultra 相媲美,但在尺寸上幾乎可以與之媲美 Sep 07, 2024 am 06:35 AM

IFA 2024 | TCL 的 NXTPAPER 14 在性能上無法與 Galaxy Tab S10 Ultra 相媲美,但在尺寸上幾乎可以與之媲美

Vivo Y300 Pro 在 7.69 毫米纖薄機身中配備 6,500 mAh 電池 Vivo Y300 Pro 在 7.69 毫米纖薄機身中配備 6,500 mAh 電池 Sep 07, 2024 am 06:39 AM

Vivo Y300 Pro 在 7.69 毫米纖薄機身中配備 6,500 mAh 電池

新報告對傳聞中的三星 Galaxy S25、Galaxy S25 Plus 和 Galaxy S25 Ultra 相機升級進行了嚴厲的評估 新報告對傳聞中的三星 Galaxy S25、Galaxy S25 Plus 和 Galaxy S25 Ultra 相機升級進行了嚴厲的評估 Sep 12, 2024 pm 12:22 PM

新報告對傳聞中的三星 Galaxy S25、Galaxy S25 Plus 和 Galaxy S25 Ultra 相機升級進行了嚴厲的評估

三星 Galaxy S24 FE 預計將以低於預期的價格推出,有四種顏色和兩種記憶體選項 三星 Galaxy S24 FE 預計將以低於預期的價格推出,有四種顏色和兩種記憶體選項 Sep 12, 2024 pm 09:21 PM

三星 Galaxy S24 FE 預計將以低於預期的價格推出,有四種顏色和兩種記憶體選項

摩托羅拉 Razr 50s 在早期洩漏中顯示自己可能是新的預算可折疊手機 摩托羅拉 Razr 50s 在早期洩漏中顯示自己可能是新的預算可折疊手機 Sep 07, 2024 am 09:35 AM

摩托羅拉 Razr 50s 在早期洩漏中顯示自己可能是新的預算可折疊手機

小米紅米 Note 14 Pro Plus 上市,成為首款配備 Light Hunter 800 相機的高通 Snapdragon 7s Gen 3 智慧型手機 小米紅米 Note 14 Pro Plus 上市,成為首款配備 Light Hunter 800 相機的高通 Snapdragon 7s Gen 3 智慧型手機 Sep 27, 2024 am 06:23 AM

小米紅米 Note 14 Pro Plus 上市,成為首款配備 Light Hunter 800 相機的高通 Snapdragon 7s Gen 3 智慧型手機

See all articles