在我的活动中,我创建了一个Bitmap对象,然后我需要启动另一个Activity,如何Bitmap从子活动(将要启动的那个)传递这个对象?
我有一个bmp在Activity1中命名的Bitmap变量,我想将位图发送到Activity2
以下是我用来传递意图的代码.
Intent in1 = new Intent(this, Activity2.class);
in1.putExtra("image",bmp);
startActivity(in1);
Run Code Online (Sandbox Code Playgroud)
在Activity2中,我尝试使用以下代码访问位图
Bundle ex = getIntent().getExtras();
Bitmap bmp2 = ex.getParceable("image");
ImageView result = (ImageView)findViewById(R.Id.imageView1);
result.setImageBitmap(bmp);
Run Code Online (Sandbox Code Playgroud)
应用程序运行时没有例外,但它没有给出预期的结果
假设我有一个从库中选择图像的活动,并将其作为BitMap检索,就像示例:here
现在,我想传递此BitMap以在ImageView中用于另一个活动.我知道bundle可以在活动之间传递,但是我如何将这个BitMap存储到bundle中?
还是我应该采取另一种方法?
我是android的新手.我想将位图传递给Bundle.但我找不到任何解决方案.实际上,我很困惑.我想在Dialog片段中显示图像.但我不知道如何投入Bundle.我应该发送PutByteArray()吗?但是如果我将位图作为参数传递,那么它就是一个错误的参数.
这是我的代码:
public class MyAlert extends DialogFragment {
Bitmap b;
public MyAlert newInstance(Bitmap b) {
this.b=b;
MyAlert frag=new MyAlert();
Bundle args=new Bundle();
args.put("bitByte",b);
frag.setArguments(args);
return frag;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Bitmap bitmap=getArguments().getByteArray("bitByte");
return new AlertDialog().Builder(getActivity());
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()).setView(R.id.fragid).create();
Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我启动了一个前台服务并为其创建了一个通知:
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, channelId);
...
builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.icon));
...
Run Code Online (Sandbox Code Playgroud)
这会在我的用户设备之一上引发异常,如下所示(java.lang.RuntimeException: Could not copy bitmap to parcel blob.异常)。
我的图标确实有默认尺寸和小尺寸,不知道为什么它们会在一台设备上出现问题。
有谁知道真正的问题可能是什么?我如何避免这个问题或优雅地处理这种情况?好像是内存问题。
Mipmap 图标
我包含了以下图标:
例外
java.lang.RuntimeException: Unable to start service com.my.app.services.OverlayService@ea0edcc with Intent { act=RESUME cmp=com.my.app/.services.OverlayService }: java.lang.RuntimeException: Could not copy bitmap to parcel blob.
at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3079)
at android.app.ActivityThread.access$2200(ActivityThread.java:163)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5585)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)
at …Run Code Online (Sandbox Code Playgroud) 头等舱
public class ChooseDriver extends Activity implements OnItemClickListener {
private static final String rssFeed = "http://trade2rise.com/project/seattle/windex.php?itfpage=driver_list";
private static final String ARRAY_NAME = "itfdata";
private static final String ID = "id";
private static final String NAME = "name";
private static final String IMAGE = "image";
List<Item> arrayOfList;
ListView listView;
MyAdapter objAdapter1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.choose_driver);
listView = (ListView) findViewById(R.id.listView1);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
Item item = …Run Code Online (Sandbox Code Playgroud)