gpt4 book ai didi

Android 原生 Parcel 使用

转载 作者:太空宇宙 更新时间:2023-11-04 12:49:21 31 4
gpt4 key购买 nike

我正在使用本地代码尝试 Parcel:

#include <stdio.h>
#include <binder/IInterface.h>
#include <binder/Parcel.h>
#include <binder/IBinder.h>
#include <binder/Binder.h>
#include <binder/ProcessState.h>
#include <binder/IPCThreadState.h>
#include <binder/IServiceManager.h>

using namespace android;

int main()
{
int32_t i = 123, j = 456;

Parcel data;
status_t t = data.writeInt32(j);
if(t == NO_ERROR)
printf("Status: %d\n", t);
else if(t == BAD_VALUE)
printf("Bad Value\n");

int32_t jj = 0;
t = data.readInt32(&jj);
printf("t: %d\n", t);
printf("ParcelTest: %d\n", jj);

return 0;
}

要编译此代码,需要 Android 的源代码树。把它放在 external/ParcelTest 下。 Android.mk 是 here 。运行mmma external/ParcelTest进行编译。

程序的输出是:

generic_x86:/ # /system/bin/ParcelTest
Status: 0
t: -61
ParcelTest: 0

Status: 0 表示将值写入 Parcel 成功了。但阅读不会。所以 Parcel 是这样的,如果我按照我写的顺序读取数据,我会得到正确的结果。知道为什么此代码示例会失败吗?

最佳答案

正确的用法如下:

#include <stdio.h>
#include <binder/IInterface.h>
#include <binder/Parcel.h>
#include <binder/IBinder.h>
#include <binder/Binder.h>
#include <binder/ProcessState.h>
#include <binder/IPCThreadState.h>
#include <binder/IServiceManager.h>

using namespace android;

int main()
{
int32_t i = 123, j = 456;

Parcel data;
status_t t = data.writeInt32(j);
if(t == NO_ERROR)
printf("Status: %d\n", t);
else if(t == BAD_VALUE)
printf("Bad Value\n");

int32_t jj = 0;
data.setDataPosition(0);
t = data.readInt32(&jj);
printf("t: %d\n", t);
printf("ParcelTest: %d\n", jj);

return 0;
}

必须手动设置读取位置。

关于Android 原生 Parcel 使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49796329/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com