问题描述
我有一个openCV Mat列表,试图将所有列表从Activity1传递给Activity2,但我不知道如何实现。我已经看到了这个link for send only 1 mat ,但一个接一个地发送Mat似乎不是解决方案。
Intent i = new Intent( Activity1.this,Activity2.class );
i.putExtra("someExtra",someExtra);
i.putExtra("list",ArrayList<Mat> ); ///I wan't to do something like that.
startActivity(i);
Activity1.this.finish();
// Activity2
getIntent().getExtra("list"); // get my list
解决方法
使Mat
类实现可拆分接口this is an official link。
在那之后,下面的代码应该起作用:
Intent i = new Intent( Activity1.this,Activity2.class );
i.putExtra("someExtra",someExtra);
i.putExtra("list",ArrayList<Mat> )
要获取数据,请使用:
ArrayList<String> myList = (ArrayList<String>) getIntent().getSerializableExtra("list");
,
您需要发送构成Mat对象的原始对象,并在另一侧重建Mat。
我自己还没有做这件事,但是看一下javadoc,有一些选择:
https://docs.opencv.org/3.4/javadoc/org/opencv/core/Mat.html
一种可能是使用本机地址和地址构造函数。即:
https://docs.opencv.org/3.4/javadoc/org/opencv/core/Mat.html#%3Cinit%3E(long) 和 https://docs.opencv.org/3.4/javadoc/org/opencv/core/Mat.html#getNativeObjAddr()
在每个Mat(一个getNativeObjAddr
)上使用Int
,并将一个List<Int>
存储在您的Intent
中。然后,另一方面,使用List<Mat>
构造函数重新创建Mat(Int)
。
如果这不起作用,请查看如何创建Mat
对象,如果使用byte[]
,然后再次尝试使用Intent发送。