当前位置: 代码迷 >> Android >> JNI方法GetStringChars遇到数字截断的有关问题,
  详细解决方案

JNI方法GetStringChars遇到数字截断的有关问题,

热度:53   发布时间:2016-04-28 05:45:11.0
JNI方法GetStringChars遇到数字截断的问题,在线等。
如果上层传入 String  str = "123456";
在 JNI 层用 GetStringChars 方法取到的字符串被截断了,只有第一个数字 1,请问这个怎么解决?代码如下:

------------------- Android --------------------
package com.test;

import com.test.R;

import android.app.Activity;
import android.os.Bundle;

public class T9py extends Activity {
public static native void  addPhone(String str);

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

System.loadLibrary("t9py");

addPhone("123456");
}
}

---------------------- JNI -----------------------
extern "C" void Java_com_test_T9py_addPhone(JNIEnv* env, jobject thiz, jstring jphone)
{
    const char *ps8Phone  = NULL;

    ps8Phone  = (char *)env->GetStringChars(jphone, 0);

    __android_log_print(ANDROID_LOG_WARN, "test", "%s, len = %d", ps8Phone, strlen(ps8Phone));

    env->ReleaseStringChars(jphone, (jchar *)ps8Phone);
}

logcat 输出信息是:

1, len = 1

------解决方案--------------------
const  jchar *  GetStringChars (JNIEnv*env, jstring string,  jboolean *isCopy);           

   功能:返回指向字符串的 Unicode 字符数组的指针。该指针在调用 ReleaseStringchars() 前一直有效。          

         如果 isCopy 非空,则在复制完成后将 *isCopy 设为 JNI_TRUE。如果没有复制,则设为JNI_FALSE。  

   参数:   env:JNI 接口指针。            

                string:Java 字符串对象。          

                isCopy:指向布尔值的指针。               

   返回值:   指向 Unicode 字符串的指针,如果操作失败,则返回NULL。        

------解决方案--------------------
数字转成 unicode 之后有一个字节为 0,而 __android_log_print 遇到 0 就停止打印了(类似 c 语言的 printf,因为 c 语言的字符串是以 0 为结束的),所以没有打印完整。
  相关解决方案