gpt4 book ai didi

java - Intent.putExtras(String key, Message object) throws Can't marshal non-Parcelable 对象跨进程

转载 作者:行者123 更新时间:2023-12-02 11:52:59 27 4
gpt4 key购买 nike

这是我的默认 Activity 中的 WebChromeClient:

@Override
public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
Intent intent = new Intent(mActivty, PopUpActivity.class);
intent.putExtra("MESSAGE", resultMsg);
mActivity.startActivity(intent);
return true;

这就是我在 PopUpActivity 中处理的方式:

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

getWindow().setBackgroundDrawable(null);

mCloseButton = (ImageButton) findViewById(R.id.close_button);

// we don't care about getting a warmed webview in this case, just create a new one
mWebView = WebViewConstructor.constructWebView(this);

mWebViewContainer = (RelativeLayout) findViewById(R.id.webview_container);

// add the webview to the container layout
WebViewManager.attachWebViewToParentContainer(mWebView, mWebViewContainer);
Intent intent = getIntent();
if (intent.getExtras() != null) {
Message resultMsg = intent.getExtras().getParcelable("MESSAGE");
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(mWebView);
resultMsg.sendToTarget();
}

基本上,我想将作为 resultMsg.obj 传入的 WebView.WebViewTransport 传递给 PopUpActivity,以便他可以构造 webview 并处理消息。但是,我收到此错误,由该行引起intent.putExtra("MESSAGE", resultMsg):

Can't marshal non-Parcelable objects across processes.

即使 resultMsg 是一个实现 Parcelable 的 Message 类?

我在这里缺少什么?

最佳答案

根据您的代码,您使用intent.getExtras()来获取值。intent.getExtras()的返回是Bundle,所以你应该使用Bundle来传输数据。

改变

Intent intent = new Intent(mActivty, PopUpActivity.class);
intent.putExtra("MESSAGE", resultMsg);
mActivity.startActivity(intent);

 Intent intent = new Intent(mActivty, PopUpActivity.class);
Bundle bundle = new Bundle();
bundle.putParcelable("MESSAGE", resultMsg);
intent.putExtras(bundle);
mActivity.startActivity(intent);

另一种方式

您使用 intent.putExtra 来传输 Message ,并且 MessageParcelable 。所以您可以使用intent.getParcelableExtra 获取值。

改变

Intent intent = getIntent();
if (intent.getExtras() != null) {
Message resultMsg = intent.getExtras().getParcelable("MESSAGE");
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(mWebView);
resultMsg.sendToTarget();

Intent intent = getIntent();
Message resultMsg = intent.getParcelableExtra("MESSAGE")
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(mWebView);
resultMsg.sendToTarget();

注意

  • 如果使用Bundle来传输数据,则必须使用Bundle来获取数据并进行处理。

  • 如果使用普通的putExtra方法传输数据,则可以使用相应的get方法来获取数据。

关于java - Intent.putExtras(String key, Message object) throws Can't marshal non-Parcelable 对象跨进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47764325/

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