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

Android NDK的学习之旅- 数据传输

1、主要流程

1、  String 字符串传输
a) 上层定义一个native的方法,需要一个String  参数 ,返回一个String
b) JNI对应上层的方法,打印出上层传输下来的String数据,并返回处理String数据
c) 上层 收到 native 方法 返回的 值,在UI中显示出来


2、  自定义对象的传输
a) 自定义一个对象Person
b) 上层定义一个native方法,参数Person,返回值Person
c) JNI接收对象,打印出相关信息数据
d) JNI 修改Person 对象数据,并返回到上层
e) 上层接收到数据后 在UI显示出来


2设计实现
1、  界面设计如下:
 

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

2、  关键代码说明
Transmission.java
Java代码 
package com.duicky; 
 
/**
 * 
 * <p>
 * Title: aa.java
 * </p>
 * <p>
 * E-Mail: 176291935@qq.com
 * </p>
 * <p>
 * QQ: 176291935
 * </p>
 * <p>
 * Http: iaiai.iteye.com
 * </p>
 * <p>
 * Create time: 2011-9-19
 * </p>
 * 
 * @author 丸子
 * @version 0.0.1
 */ 
public class Transmission { 
 
    private static final String libSoName = "NDK_07"; 
     
    public native String transferString(String mStrMSG); 
     
    public native Object  transferPerson(Person mPerson); 
 
     
    /**
     * 载入JNI生成的so库文件
     */ 
    static { 
        System.loadLibrary(libSoName); 
    } 


MainActivity.java
Java代码 
package com.duicky; 
 
import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 
 
/**
 * 
 * <p>
 * Title: MainActivity.java
 * </p>
 * <p>
 * E-Mail: 176291935@qq.com
 * </p>
 * <p>
 * QQ: 176291935
 * </p>
 * <p>
 * Http: iaiai.iteye.com
 * </p>
 * <p>
 * Create time: 2011-9-19
 * </p>
 * 
 * @author 丸子
 * @version 0.0.1
 */ 
public class MainActivity extends Activity { 
     
    //也就是你mk配置文件中的  LOCAL_MODULE    := NDK_06 
    private Context mContext = null; 
    private Transmission mTransmission = null; 
     
     
    private Button btnString = null; 
    private Button btnPerson = null; 
    private TextView tvString = null; 
    private TextView tvPerson = null; 
     
     
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        mContext = this; 
        mTransmission = new Transmission(); 
        initViews(); 
    } 
     
    /**
     * 初始化控件
     */ 
    private void initViews() { 
        btnString = (Button) findViewById(R.id.btn_string); 
        btnPerson = (Button) findViewById(R.id.btn_person); 
        tvString = (TextView) findViewById(R.id.tv_string); 
        tvPerson = (TextView) findViewById(R.id.tv_person); 
        btnString.setOnClickListener(new MyOnClickListener()); 
        btnPerson.setOnClickListener(new MyOnClickListener()); 
    } 
 
    private void transferString() { 
        String mStrMSg = mTransmission.transferString(" This Message come from Java "); 
        LogUtils.printWithSystemOut(mStrMSg); 
        tvString.setText(mStrMSg); 
    } 
 
    private void transferPerson() { 
        Person mPerson = new Person(); 
        mPerson.setAge(10); 
        mPerson.setName("duicky"); 
        Person mPerson1 = (Person)mTransmission.transferPerson(mPerson); 
        if(mPerson1 == null) { 
            LogUtils.printWithSystemOut("error"); 
            tvPerson.setText("传递出现错误,请重试"); 
            return; 
        } 
        LogUtils.printWithSystemOut(mPerson1.toString()); 
        tvPerson.setText("Java --- > "+mPerson1.toString()); 
    } 
     
   class MyOnClickListener implements OnClickListener{ 
 
        @Override 
        public void onClick(View v) { 
            switch(v.getId()) { 
                case R.id.btn_string: 
                    transferString(); 
                    break; 
               

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,