Android Studio3.0开发JNI流程------JNI中字符串拼接的二种方式(C++)
来源:互联网 发布:sql语句范围查询 编辑:程序博客网 时间:2024/06/04 17:54
字符串拼接在java中很常见,比如拼接url路径,那么到了jni开发中怎么使用java中拼接字符串呢?不废话了啊,直接来个案例分析
我们将Android Studio3.0默认创建的工程文本显示从jni中拼接输出…
我们写一个简单的字符串返回的native方法,调用时给“Hello”参数,调用二种不同方式的拼接方法,在屏幕文本时输出内容为:Hello-World以及 Hello,欢迎来到JNI的世界!
MainActivity.java类:
package fj.clover.jnistringbuilder;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.TextView;public class MainActivity extends AppCompatActivity { static { System.loadLibrary("native-lib"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv = (TextView) findViewById(R.id.sample_text); //调用native本地方法调用,实现在屏幕输出Hello-World! tv.setText(getString("Hello")); TextView tv1 = (TextView) findViewById(R.id.sample_text1); //调用native本地方法调用,实现在屏幕输出Hello,欢迎来到JNI的世界! tv1.setText(getString1("Hello")); } /** * 以下native方法主要是在JNI代码(C++)中实现getStr()方法内容 * @param str * @return */ public native String getString(String str); //方式一 public native String getString1(String str); //方式二 /*public String getStr(String str){ String string="-World!"; return str+string; }*/}
C++代码
#include <jni.h>#include <string.h>#include <stdlib.h>/** * jstring转char函数... * @param env * @param jstr * @return */char *Jstring2CStr(JNIEnv *env, jstring jstr) { char *rtn = NULL; jclass clsstring = env->FindClass("java/lang/String"); jstring strencode = env->NewStringUTF("UTF-8"); //这里填写是工作空间的编码,若是默认中文则是GB2312 jmethodID mid = env->GetMethodID(clsstring, "getBytes", "(Ljava/lang/String;)[B"); jbyteArray barr = (jbyteArray) env->CallObjectMethod(jstr, mid, strencode); jsize alen = env->GetArrayLength(barr); jbyte *ba = env->GetByteArrayElements(barr, JNI_FALSE); if (alen > 0) { rtn = (char *) malloc(alen + 1); //字符串拼接函数... memcpy(rtn, ba, alen); rtn[alen] = 0; } env->ReleaseByteArrayElements(barr, ba, 0); return rtn;}extern "C"/** * 字符串拼接的第一种方法 * @param env * @param instance * @param str_ * @return */JNIEXPORT jstring JNICALLJava_fj_clover_jnistringbuilder_MainActivity_getString(JNIEnv *env, jobject instance, jstring str_) { char *cstr = Jstring2CStr(env, str_); char *hellostr = "-World"; strcat(cstr, hellostr); //拼接两个字符串 return env->NewStringUTF(cstr);}extern "C"JNIEXPORT jstring JNICALL/** * 字符串拼接的第二种方法 * @param env * @param instance * @param str_ * @return */Java_fj_clover_jnistringbuilder_MainActivity_getString1(JNIEnv *env, jobject instance, jstring str_) { jstring message = env->NewStringUTF( strcat((char *) env->GetStringUTFChars(str_, JNI_FALSE), ",欢迎来到JNI的世界!")); return message;}
输出结果:
阅读全文
0 0
- Android Studio3.0开发JNI流程------JNI中字符串拼接的二种方式(C++)
- Android Studio3.0开发JNI流程------JNI入门级
- Android Studio3.0开发JNI流程------JNI函数
- Android Studio3.0开发JNI流程------在JNI中输出打印日志
- Android Studio3.0开发JNI流程------JNI的类型和数据结构
- Android Studio3.0开发JNI流程------Java多态性在JNI的表现形式
- Android Studio3.0开发JNI流程------JNI静态注册和动态注册(多个类的native动态注册-经典篇)
- Android Studio3.0开发JNI流程------JNI接口函数和指针
- Android Studio3.0开发JNI流程------JNI为静态常量(public static)赋值操作
- Android Studio3.0开发JNI流程------在Android原程序基础添加自己的类的native方法
- Android Studio3.0开发JNI流程------Java调用C++以及C++调用Java
- Android--JNI的开发流程
- Android JNI 开发的流程
- Android JNI调用的二种方式
- android jni 开发流程
- Android JNI开发流程
- android jni开发流程
- Android JNI开发流程
- MySQL查询(待续)
- STM32的PWM
- Android7.0 & 8.0 Language Settings 定制
- Python 图形化编程实例
- 周日历
- Android Studio3.0开发JNI流程------JNI中字符串拼接的二种方式(C++)
- Kafka解析之失效副本
- Cannot change version of project facet Dynamic Web Module to 2.3.
- 移动安全逆向著作《Android应用安全防护和逆向分析》终于发售了,先来一波签名送书福利!
- java 调用hanlp提取关键词
- DenseNets论文笔记及读后感
- Java集合框架(二)--Collection
- 剑指offer系列(8)——斐波那契数列
- C++ MFC 测试数据后台监控程式