我正在编写一个测试代码来研究binder API,参考(参考样本也有类似的问题)https://github.com/qianjigui/android_system_service_example
我写了一个Java服务和一个本机客户端。似乎一切都很好,除了我无法获得返回String的全部内容。
服务器端方法getName:
@Override
public String getName() throws RemoteException {
Log.i("------>", "Calling method getName()");
return "123456";
}
客户端代理方法:
String16 BpTestServiceAPI::getName()
{
Parcel data, reply;
data.writeInterfaceToken(IRemoteControlServiceAPI::getInterfaceDescriptor());
//By operation code to transact
remote()->transact(GET_NAME, data, &reply);
//Exception Code. In Java Level, aidl auto generate codes will process exceptioncode.
reply.readExceptionCode();
return reply.readString16();
}
问题在于,当我尝试打印getName()的字符串内容时,只能打印第一个字节。例如。我回来了#34; 123456"从服务器,但
ALOGE("Service Name=%s", bts->getName().string());
只给了我
E/ ( 5344): Service Name=1
我还尝试打印出String8实例的长度,在这种情况下它是6。我尝试使用getCString并直接使用它作为(char *),我得到了空结果。
那么,有谁知道这里出了什么问题?