android jni (5)——Field & Method --> Accessing Mehtod
在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就介绍到这,关于别的返回值的函数大家可以自己去尝试,用法都是差不多的。
android jni (5)——Field & Method --> Accessing Mehtod的更多相关文章
- android JNI (二) 第一个 android工程
下载NDK 后 它自带有 sample,初学者 可以导入Eclipse 运行 这里 我是自己创建的一个新工程 第一步: 新建一个Android工程 jni_test(名字自取) 第二步:为工程添加 本 ...
- 【转】android 电池(三):android电池系统
关键词:android电池系统电池系统架构 uevent power_supply驱动 平台信息: 内核:linux2.6/linux3.0系统:android/android4.0 平台:S5PV3 ...
- 安卓开发_浅谈Android动画(四)
Property动画 概念:属性动画,即通过改变对象属性的动画. 特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置 一.重要的动画类及属性值: 1. ValueAnimator 基本属 ...
- 【转】android Graphics(四):canvas变换与操作
android Graphics(四):canvas变换与操作 分类: 5.andriod开发2014-09-05 15:05 5877人阅读 评论(18) 收藏 举报 目录(?)[+] 前言 ...
- android安全问题(八)伪造短信(利用原生android4.0漏洞)
导读:本文利用android4.0的一个原生漏洞来伪造短信.无须声明任何权限即可伪造发送方为任何号码的短信给用户. android4.0发布已经是很久很久很久很久以前的事情了,这个漏洞早就报了出来,之 ...
- android Graphics(四):canvas变换与操作
前言:前几篇讲解了有关canvas绘图的一些操作,今天更深入一些,讲讲对画布的操作,这篇文章不像前几篇那么容易理解,如果以前没有接触过画布的童鞋可能比较难以理解,为什么会这样.我尽量多画图,让大家更清 ...
- android Graphics(三):区域(Range)
前言:最近几天对画图的研究有些缓慢,项目开始写代码了,只能在晚上空闲的时候捯饬一下自己的东西,今天给大家讲讲区域的相关知识,已经想好后面两篇的内容了,这几天有时间赶紧写出来给大家.有关界面开发的东东内 ...
- android Graphics(一):概述及基本几何图形绘制
前言:我最近想抽空研究研究android的各种特效,android的特效真是其它平台无法比拟的,而且一个漂亮的UI交互,会给APP增色不少,而学习特效之前,有关graphics绘图的基础知识是必不可少 ...
- android - 自定义(组合)控件 + 自定义控件外观
转载:http://www.cnblogs.com/bill-joy/archive/2012/04/26/2471831.html android - 自定义(组合)控件 + 自定义控件外观 A ...
随机推荐
- c语言学习之结构篇代码演示样例-输入n个同学的姓名,数学英语成绩,依照平均分从低到高排序并输出
#include<stdio.h> void main(){ const int count = 5;//定义数量 struct student{ char name[80]; float ...
- 一个不错的PPT,扁平化设计,开放资源,要的进来
开了那么多的博客,没做啥资源贡献,今天共享一个不错的PPT模板.例如以下图所看到的,须要的话留下邮箱 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGFp ...
- java 图片 批量 压缩 +所有压缩
/* oldsrc : 原图片地址目录 如 'd:/' newsrc : 压缩后图片地址目录 如 'e:/' widthdist,heightdist : 压缩后的宽和高 ...
- QT5 r 加入qwtplot3d 三维库
qwtplot3d是基于QtOpenGL开发的,也是qwt库的三维库,我使用的是qwtplot3d-0.2.7.zip版本. 步骤跟编译qwt库一样(不明白可以看回前面写的一篇文章“Q ...
- Android 打造形形色色的进度条 实现可以如此简单
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/43371299 ,本文出自:[张鸿洋的博客] 1.概述 最近需要用进度条,秉着不重 ...
- CSS基础知识笔记(三)
继承 继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代.比如下面代码:如某种颜色应用于p标签,这个颜色设置不仅应用p标签,还应用于p标签中的所有子元素文本,这里子元素为s ...
- iocfont 网页图标字体以及使用方法
在网页设计中使用图标字体(icon font)是件挺有新意的事情,使用图标字体能我们带来了一定的方便,比如在移动设备.Retina屏幕效果展示.兼容IE6/7浏览器以及能任意将图标放大缩小等,这些都是 ...
- FineUI上传文件应用(三)
一.文件上传控件 <x:FileUpload runat="server" ID="file" EmptyText="请选择文件" L ...
- Selenium webdriver 截图 太长截不全的问题
Selenium webdriver 截图 太长截不全的问题 1.环境 selenium webdriver.net 2.46.0.0 + firefox 37.0.1 + win 8.1 2.问题 ...
- Lua绑定C++类
原文:http://blog.csdn.net/chenee543216/article/details/12074771 以下是代码: Animal.h文件 #pragma once #ifndef ...