Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java putExtras(字符串键、消息对象)抛出无法跨进程封送不可打包的对象_Java_Android_Message_Parcelable - Fatal编程技术网

Java putExtras(字符串键、消息对象)抛出无法跨进程封送不可打包的对象

Java putExtras(字符串键、消息对象)抛出无法跨进程封送不可打包的对象,java,android,message,parcelable,Java,Android,Message,Parcelable,这是我默认活动中的WebChromeClient: @Override public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) { Intent intent = new Intent(mActivty, PopUpActivity.class); intent.putExtra("MESSAGE", resultMsg);

这是我默认活动中的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中的处理方式:

基本上,我希望将作为resultsg.obj传入的WebView.WebViewTransport传递给PopUpActivity,以便他可以构造WebView并处理消息。但是,我得到了这个错误,是由行引起的 intent.putExtraMESSAGE,resultsg:

即使ResultMg是一个实现Parcelable的消息类


我这里缺少什么?

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

改变

Intent intent = new Intent(mActivty, PopUpActivity.class);
intent.putExtra("MESSAGE", resultMsg);
mActivity.startActivity(intent);
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.putExtra传输消息,并且消息是可包裹的。因此,您可以使用intent.getParcelableExtra获取值

改变

Intent intent = new Intent(mActivty, PopUpActivity.class);
intent.putExtra("MESSAGE", resultMsg);
mActivity.startActivity(intent);
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();

若使用Bundle传输数据,则必须使用Bundle获取数据并进行处理

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


谢谢你注意到这种差异。。正如您所提到的,我正在尝试使用intent.putExtra来传输消息,消息是可以打包的,因为它在原始代码中是可以打包的。但是,错误来自尝试执行intent.putExtraMESSAGE,resultsg;说resultMsg不可打包,即使它是一个消息对象。您可以两种方式都尝试。我尝试了第二种方式,但仍然无法跨进程封送不可打包的对象错误:Intent Intent=new IntentActivity,PopUpActivity.class;捆绑=新捆绑;bundle.putParcelableMESSAGE,resultsg;意图。追加保证金;intent.addFlagsInt.FLAG_活动_新任务| intent.FLAG_活动_单个_顶部;mActivity.startactivitynent;
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();