如何从本地空间中的parcel中检索字符串数据?

时间:2017-01-04 14:28:32

标签: java android c++

我有一个Native Command,它通过绑定器使用parcel与Android框架中的系统服务进行交互,以获取一些数据并将其显示给用户。数据由整数和字符串变量组成。从SS发送的数据使用     parcel.writeInt() 和     parcel.writeString() 分别用于整数和字符串数据。 现在,问题是如何在本机空间(而不是JNI)中检索此数据,其中我的本机命令处理代码以.cpp文件的形式存在?原生空间中没有等效的parcel.readInt()或parcel.readString()方法可用于解组或处理收到的宗地数据。如果我使用parcel.readInt32()和parcel.readString16()方法之类的可用方法,则数据不正确(可能)并且不会显示在屏幕上。 我们非常感谢您对此问题的任何见解和可能的解决方案。

谢谢&问候,

1 个答案:

答案 0 :(得分:0)

您需要在Java中创建一个从包裹中获取字符串的函数:

private String getDataFromParcel(Parcel parcel) {
    return parcel.readString();
}

从JNI调用它(你说你在JNI环境中有包裹):

std::string getString(jobject object, jobject parcel) const {
    bool result = false;

    JNIEnv *env = JniGetEnv();
    jmethod jGetDataFromParcelMethod = getJMethod(object);
    jstring javaValue = (jstring) env->CallObjectMethod(object, jGetDataFromParcelMethod, parcel);

    ...
}