使用surface.writeToParcel(parcel)后再读取parcel中的内容为空是怎么回事?

ayaers 2021-02-23 10:45:11
根据writeToParcel()的源码,应该是会先write一个string类型的,为什么调用writeToParcel()后parcel.readString()读出来的为空呢?
源码:
SurfaceView sv = (SurfaceView) findViewByID(R.id.videoview);
Parcel request = Parcel.obtain();
sv.getHolder().getSurface().writeToParcel(request, 0);
request.setDataPosition(0);
Log.i(TAG, "read string" + request.readString());
...全文
1177 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dr.rui 2021-02-25
  • 打赏
  • 举报
回复
easyeasyeasy
  • 打赏
  • 举报
回复
不会写代码的猴子 版主 2021-02-24
  • 打赏
  • 举报
回复
引用 7 楼 ayaers 的回复:
正常通过接口传参jobject surface或者通过GetFieldID确实可以拿到java层的surface对象,但是我这里想要用parcel传递surface需要怎么做呢?
先write再read?
xtynihak 2021-02-24
  • 打赏
  • 举报
回复
学习了,谢谢
不会写代码的猴子 版主 2021-02-24
  • 打赏
  • 举报
回复
引用 11 楼 ayaers 的回复:
通过parcel.writeParcelable(Surface, flag);这样吗
ayaers 2021-02-24
  • 打赏
  • 举报
回复
通过parcel.writeParcelable(Surface, flag);这样吗
不会写代码的猴子 版主 2021-02-24
  • 打赏
  • 举报
回复
引用 9 楼 ayaers 的回复:
怎么把surface write到parcel中?
surface继承了parcelable,可以直接用write
ayaers 2021-02-24
  • 打赏
  • 举报
回复
怎么把surface write到parcel中?
ayaers 2021-02-23
  • 打赏
  • 举报
回复
正常通过接口传参jobject surface或者通过GetFieldID确实可以拿到java层的surface对象,但是我这里想要用parcel传递surface需要怎么做呢?
不会写代码的猴子 版主 2021-02-23
  • 打赏
  • 举报
回复
引用 4 楼 ayaers 的回复:
那这个地方writeToParcel接口的功能是什么呢?调用完之后parcel中还是空的。。。 我这里是想将surface对象封装到parcel中,然后通过写好的jni接口将parcel传到我这边的native层,不想新增jni接口传递这个surface。 但是我现在就是在java层调用完writeToParcel之后,这个parcel好像就是空的,更不用说native层了
这里的writeToParcel可以携带一些自定义的数据吧
不会写代码的猴子 版主 2021-02-23
  • 打赏
  • 举报
回复
jni层的surface,不是直接可以转换成ANativeWindow 吗?
ayaers 2021-02-23
  • 打赏
  • 举报
回复
那这个地方writeToParcel接口的功能是什么呢?调用完之后parcel中还是空的。。。 我这里是想将surface对象封装到parcel中,然后通过写好的jni接口将parcel传到我这边的native层,不想新增jni接口传递这个surface。 但是我现在就是在java层调用完writeToParcel之后,这个parcel好像就是空的,更不用说native层了
不会写代码的猴子 版主 2021-02-23
  • 打赏
  • 举报
回复
那是因为底层已经read过了,把write进去的内容读取并释放了
ayaers 2021-02-23
  • 打赏
  • 举报
回复
但是Surface的writeToParcel接口中不是已经写入一个string了吗? 调用完writeToParcel之后为什么不能获取这个string?
不会写代码的猴子 版主 2021-02-23
  • 打赏
  • 举报
回复

public class Surface implements Parcelable
想要读取Parce的内容,必须要要先在Parcel中write。 你的Parcel request = Parcel.obtain();只初始化了,没有写入任何内容,request.readString()肯定为空咯。 你需要这个request.writeString("");

80,330

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧