当前位置:操作系统 > 安卓/Android >>

基于Android NDK的学习之旅-----数据传输(引用数据类型)

1、主要流程
<!--[if !supportLists]-->1、  <!--[endif]-->String 字符串传输

<!--[if !supportLists]-->a)         <!--[endif]-->上层定义一个native的方法,需要一个String  参数 ,返回一个String

<!--[if !supportLists]-->b)        <!--[endif]-->JNI对应上层的方法,打印出上层传输下来的String数据,并返回处理String数据

<!--[if !supportLists]-->c)         <!--[endif]-->上层 收到 native 方法 返回的 值,在UI中显示出来

 

 

<!--[if !supportLists]-->2、  <!--[endif]-->自定义对象的传输

<!--[if !supportLists]-->a)         <!--[endif]-->自定义一个对象Person

<!--[if !supportLists]-->b)        <!--[endif]-->上层定义一个native方法,参数Person,返回值Person

<!--[if !supportLists]-->c)         <!--[endif]-->JNI接收对象,打印出相关信息数据

<!--[if !supportLists]-->d)        <!--[endif]-->JNI 修改Person 对象数据,并返回到上层

<!--[if !supportLists]-->e)         <!--[endif]-->上层接收到数据后 在UI显示出来

 

 

2设计实现
<!--[if !supportLists]-->1、  <!--[endif]-->界面设计如下:

 \


<!--[endif]-->

老老样子,很搓,嘿嘿

代码不在这贴出了,有需要的兄弟直接到文章结束部分下载。

<!--[if !supportLists]-->2、  <!--[endif]-->关键代码说明

 

Java 上层:

view sourceprint?public native String transferString(String mStrMSG); 

  

public native Object  transferPerson(Person mPerson);

  

Person.java

view sourceprint?package com.duicky; 

  

/** 

 *  

 *  

 * @author luxiaofeng <454162034@qq.com> 

 *  

 */

public class Person { 

  

    private String name; 

    private int age; 

  

    public Person() { 

        name = ""; 

        age = 0; 

    } 

  

    public String getName() { 

        return name; 

    } 

  

    public void setName(String name) { 

        this.name = name; 

    } 

  

    public int getAge() { 

        return age; 

    } 

  

    public void setAge(int age) { 

        this.age = age; 

    } 

  

    @Override

    public String toString() { 

        return "Person [name=" + name + ", age=" + age + "]"; 

    } 

  

}

  

定义两个native方法, 第一个是 用来 测试传输字符串的的,第二个是用来测试传输自定义对象的。

      

       Android.mk 文件

     

view sourceprint?LOCAL_PATH := $(call my-dir) 

  

include $(CLEAR_VARS) 

  

LOCAL_C_INCLUDES := $(LOCAL_PATH)/include 

  

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

  

LOCAL_MODULE    := NDK_07 

  

LOCAL_SRC_FILES := \ 

  

TransmissionPerson.c     \ 

  

TransmissionString.c 

  

include $(BUILD_SHARED_LIBRARY)


  


老样子,不说了,你懂的。 如果不懂,嘎嘎,那就请点击Android.mk 文件 简介咯

 

       JNI 中间层

      

       TransmissionString.c    // String 传输

    

view sourceprint?#include <string.h> 

#include <jni.h> 

#include <android/log.h> 

  

JNIEnv* jniEnv; 

  

  

//---------------------------------------------------------------- 

//---------------------------------------------------------------- 

//---------------------------------------------------------------- 

  

  

jstring 

Java_com_duicky_Transmission_transferString( JNIEnv* env,jobject thiz,jstring msg ) 

    if(jniEnv == NULL) { 

        jniEnv = env; 

    } 

  

    char data[128]; 

    memset(data, 0, sizeof(data)); 

    char *c_msg = NULL; 

    c_msg = (char *)(*jniEnv)->GetStringUTFChars(jniEnv, msg, 0); 

  

    __android_log_print(ANDROID_LOG_INFO, "JNIMsg", "C JNI  ---- > %s",c_msg); 

  

    return (*jniEnv)->NewStringUTF(jniEnv, "This is send by C JNI"); 

}


  


 

TransmissionPerson.c // 自定义对象 传输

 

view sourceprint?#include <string.h> 

#include <jni.h> 

#include <android/log.h> 

  

extern JNIEnv* jniEnv; 

  

jclass Person; 

jobject mPerson; 

jmethodID getName; 

jmethodID setName; 

jmethodID getAge; 

jmethodID setAge; 

jmethodID toString; 

  

int InitPerson(); 

void ToString(); 

void GetName(); 

void GetAge(); 

void SetName(); 

void SetAge(); 

//---------------------------------------------------------------- 

//---------------------------------------------------------------- 

//---------------------------------------------------------------- 

  

jobject 

Java_com_duicky_Transmission_transferPerson( JNIEnv* env,jobject thiz,jobject person ) 

    if(jniEnv == NULL) { 

        jniEnv = env; 

    }&nbs

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,