java意图。putExtras(字符串键、消息对象)抛出无法跨进程封送不可传递的对象
这是我默认活动中的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();
}
基本上,我想通过WebView。作为ResultMg传入的WebViewTransport。obj指向PopUpActivity,以便他可以构造webview并处理消息。但是,我得到了这个错误,是由行引起的
intent.putExtra("MESSAGE", resultMsg)
:
Can't marshal non-Parcelable objects across processes.
即使ResultMg是一个实现Parcelable的消息类
我错过了什么
# 1 楼答案
根据您的代码,您可以使用
intent.getExtras()
来获取值。而且intent.getExtras()
的返回值是Bundle
,所以您应该使用Bundle
来传输数据改变
到
另一种方式
使用
intent.putExtra
来传输Message
,而Message
是Parcelable
。因此,您可以使用intent.getParcelableExtra
来获取值改变
到
注意
如果使用
Bundle
传输数据,则必须使用Bundle
获取数据并进行处理如果使用普通的
putExtra
方法来传输数据,那么可以使用相应的get方法来获取数据