java传送class,java传送json到jni,jni传送json到java

java传送json到jni,jni传送json到java

1.先在activity中写好如下代码:

public class MainActivity extends Activity implements OnClickListener{

private Button btnMethod;

private TextView tvPrint;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initView();

}

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.btn_method:

String print = getStringFromJNI();

JSONObject jsonObject = getJsonObject();

String jsonString = tranformJson(jsonObject.toString());

tvPrint.setText(print+"\n"+jsonObject.toString()+"\n"+jsonString);

break;

default:

break;

}

}

private JSONObject getJsonObject(){

JSONObject jsonObject = new JSONObject();

try {

jsonObject.put("name", "张三");

jsonObject.put("gender", "男");

} catch (Exception e) {

}

return jsonObject;

}

private void initView(){

btnMethod = (Button)findViewById(R.id.btn_method);

btnMethod.setOnClickListener(this);

tvPrint = (TextView)findViewById(R.id.tv_print);

}

private static final String libSoName = "NDK_01";

public native String getStringFromJNI();

public native String tranformJson(String jsonString);

static {

System.loadLibrary(libSoName);

}

}

2.生成com_hyy_jni_MainActivity.h件,命令如下:

D:\workspace\android\JniLearn\bin\classes>javah -classpath “D:\Program Files\eclipse_sdk\sdk\platforms\android-18\android.jar”; com.hyy.jni.MainActivity

其他的删掉,留下的如下:

/* DO NOT EDIT THIS FILE - it is machine generated */

#include

/* Header for class com_hyy_jni_MainActivity */

#ifndef _Included_com_hyy_jni_MainActivity

#define _Included_com_hyy_jni_MainActivity

#ifdef __cplusplus

extern "C" {

#endif

/* * Class: com_hyy_jni_MainActivity * Method: getStringFromJNI * Signature: ()Ljava/lang/String; */

JNIEXPORT jstring JNICALL Java_com_hyy_jni_MainActivity_getStringFromJNI

(JNIEnv *, jobject);

/* * Class: com_hyy_jni_MainActivity * Method: tranformJson * Signature: (Ljava/lang/String;)Ljava/lang/String; */

JNIEXPORT jstring JNICALL Java_com_hyy_jni_MainActivity_tranformJson

(JNIEnv *, jobject, jstring);

#ifdef __cplusplus

}

#endif

#endif

3.新建jni文件;

4.把第2步生成的com_hyy_jni_MainActivity.h文件放到jni文件中;

5.在jni文件下新建jniCoreMethod.cpp文件,把com_hyy_jni_MainActivity.h文件下的方法名拷到jniCoreMethod.cpp文件里;

6.json.h,jsoncpp.cpp放到jni文件下;(这个得自己下载)

7.新建Android.mk,新建Application.mk

Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

OPENCV_CAMERA_MODULES:=off

LOCAL_MODULE := NDK_01

LOCAL_SRC_FILES := jniCoreMethod.cpp

LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog

LOCAL_ALLOW_UNDEFINED_SYMBOLS := true

APP_PLATFORM := android-14

include $(BUILD_SHARED_LIBRARY)

Application.mk:

APP_ABI := armeabi armeabi-v7a

APP_STL := stlport_static

APP_STL := gnustl_static

APP_CPPFLAGS +=-std=c++11

APP_CPPFLAGS := -fexceptions -frtti #允许异常功能,及运行时类型识别

APP_CPPFLAGS +=-fpermissive

8.写接收json和传送json方法;,我另外新建了jsontojson.h文件,把方法写到.h文件里:

#include

#include

#include

#include

#include

#include

#include

using namespace std;

string jsonStringtransform(string data){

Json::Reader reader;

Json::Value root;

if(reader.parse(data,root)){

string name = root["name"].asString();

string gender = root["gender"].asString();

__android_log_print(ANDROID_LOG_INFO, "JNIMsg", "Get Param: %s %s From Java", name.c_str(),gender.c_str());

// std::cout<

// std::cout<

}

Json::Value user;

user["name"] = "c++张三";

user["gender"] = "c++男";

return user.toStyledString();

}

9.然后再jniCoreMethod.cpp文件添加此jsontojson.h,如下:

#include "com_hyy_jni_MainActivity.h"

#include "jsontojson.h"

/* * Class: com_genepoint_jni_JniActivity * Method: getStringFromNative * Signature: ()Ljava/lang/String; */

jstring Java_com_hyy_jni_MainActivity_getStringFromJNI

(JNIEnv *env, jobject thiz){

return env->NewStringUTF("Hello From JNI!");

}

jstring Java_com_hyy_jni_MainActivity_tranformJson

(JNIEnv *env, jobject thiz, jstring code){

const char *str_data = env->GetStringUTFChars(code,0);

string tmp = jsonStringtransform(str_data);

return env->NewStringUTF(tmp.c_str());

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值