反射获取Java层字段的值
一:新建activity_login布局文件,编写布局代码1.打开eclipse工具,找到文章分享里面创建好的“xxx”工程,在工程中找到“res”目录,右键选择“New”选项下的“Android XML File”,弹出一个创建布局文件的对话框,填写布局文件名称为“activity_login”,选择布局文件类型为“LinearLayout”,然后点击Finish完成布局文件的创建,如下图所示。
2.编写布局xml文件的代码,分为两个步骤进行操作:
第一步:在根LinearLayout(线性布局)标签中添加属性
android:gravity="center_vertical",使其内容竖向居中。
第二步:将之前编写的登录界面的代码复制到该文件中。
3.布局代码编写完成后,切换到预览界面,如下图所示。
二:新建LoginActivity类
1.在“XXX”工程中找到src目录下的包名为comXXX的文件并选中,右键选择“New”下的“Class”,弹出新建类的对话框,在对话框中填写类名为LoginActivity后,点击Finish完成LoginActivity类的创建,如下图所示。
2.LoginActivity类创建完成后,开始编写Java代码,如下图所示。
- 第一步:加载布局界面。 第二步:声明成员变量。
- 第三步:初始化控件,在始化控件之前需要先定义相关成员变量。
- 第四步:设置按钮监听事件。 第五步:获取编辑框内容。
- 第六步:定义native方法。
- 第七步:调用native方法,判断用户输入的账号和密码是否正确。
- 第八步:如果输入的账号和密码正确,则跳转到MainActivity界面。
三:修改AndroidManifest.xml文件
在“XXX”工程中找到“AndroidManifest.xml”文件,修改程序入口界面为“LoginActivity”,再添加一个活动组件“MainActivity”,如下图所示。
四: 生成.h文件
在“yijindaxue”工程下选中src目录右键选择最后一项,properties,点击该选项弹出弹窗,复制Location对应的值,也就是文件的路径D:\Android \data\yijindaxue\src,复制成功后关闭对话框,如下图所示。
点击左下角“windows”图标,输入“cmd”命令打开窗口,输入“D:”切换到D盘,然后执行命令“cd D:\Android\data\yijindaxue\src”,进入src目录,紧接着执行命令“javah -jni com.XXX.LoginActivity”生成“.h”头文件,如下图所示。
返回“XXX”工程界面,选中src目录,右键F5刷新,看到一个com_XXX_MainActivity.h文件,将该文件移动至jni文件夹中,然后双击打开该文件,如下图所示。
五:编写C代码
在“XXX”工程中找到“jni”目录下的“XXX,c”文件,双击打开该文件,编写相应的C代码。
使用“#include”命令导入之前生成的头文件,然后将头文件中的函数复制粘贴至下图方框位置,删除“;”,并添加{},在对应的类型后面添加两个变量名env和obj,如下图所示。
编写C代码,反射获取Java层字段的值,如下图所示。
1.调用FindClass函数获取对应的类。
2.获取Java层实例字段的值:
- 第一步:调用GetFieldID函数获取Java层实例字段的ID。
- 第二步:调用GetObjectField函数获取Java层实例字段的值。
- 第三步:调用GetStringUTFChars函数将jstring类型转换为char*类型。
3.获取Java层静态字段的值:
- 第一步:调用GetStaticFieldID函数获取Java层静态字段的ID。
- 第二步:调用GetStaticObjectField函数获取Java层实例字段的值。
- 第三步:调用GetStringUTFChars函数将jstring类型转换为char*类型。
4.调用strcmp函数来比较用户输入的账号和密码是否正确。
六:编译动态链接库
在“xxx”工程下选中jni目录,右键选择“properties”,点击该选项弹出弹窗,复制“Location”对应的值,也就是文件路径D:\ Android\data\xxx\jni,复制成功后关闭对话框,如下图所示。
点击左下角“windows”图标,输入“cmd”命令打开窗口,输入“D:”切换至D盘,然后执行命令“cd D:\Android\data\xxx\jni”进入jni目录,紧接着执行“ndk-build”命令生成动态链接库“.so”文件,如下图所示。
七:修改so库加载位置
由于在调用native方法之前,要先加载so库,否则程序会崩溃,所以要将so库的位置进行修改,将MainActivity.java文件中的so库加载代码剪切至LoginActivity. java文件中,如下图所示。
八:运行应用程序
打开雷电模拟器,运行应用程序:选中“xxx”工程=>右键选择Run As选项=> 点击Android Application。
运行该程序后,当输入正确的账号和密码,会弹出弹窗提示登录成功,并且跳转到了主页面。
小结:
登录功能实现流程完成:
1、新建activity_login布局文件,编写代码是登录界面。
2、新建LoginActivity类,编写Java层登录逻辑。
第一步:加载布局界面。
第二步:声明成员变量。
第三步:初始化控件。
第四步 :设置按钮监听事件。
第五:获取编辑框内容。
第六步:定义native方法。
第七步:调用native方法,判断用户输入的账号和密码是 否正确。
第八步:如果输入的账号和密码正确,则跳转MainActivity界面。
3、修改AndroidManifest.xml文件。
4、执行javah命令生成.h头文件,并将头文件移到jni文件夹。
5、编写C代码,获取Java层字段的值。
第一步:使用#include导入头文件。
第二步:编写C代码获取Java层实例字段的值。
第三步:编写C代码获取Java层静态字段的值。
第四步:判断用户输入的账号和密码是否正确。
6、使用NDK工具编译.c文件生成动态链接库.so文件。
7、修改so库加载位置。
8、运行应用程序。
改换成as了 厉害lihai . 学习一哈{:1_918:} 这个厉害,回头试一试。 学习了,谢谢分享 这个目的是做啥的?没看懂。{:1_937:} 学习了,感谢! 大佬威武啊,好好学习一下,感谢分享。 学习了,谢谢分享
页:
[1]
2