如何将图像从活动传递到Android中的另一个活动?

时间:2018-11-29 14:20:10

标签: android android-layout

我的设置屏幕上有一张图片,我想将其发送到主屏幕上。

我将其保存在我的sharedPreferences中,并希望在其他屏幕上使用该键,就像处理文本一样。

我可以获取文本并将setText放置在文本中,但是我想知道如何在图像中执行此操作。

public void salvarDados(){
    String usrname = edtEmailSettings.getText().toString();
    String name = edtNameField.getText().toString();
    String phone = edtPhoneField.getText().toString();
    String company = edtCompanySettings.getText().toString();
    String photo = imgProfileImage.toString();
    if(!savelogincheckbox.isChecked()){
        editor.putBoolean("savelogin",true);
        editor.putString("user",usrname);
        editor.putString("nam", name);
        editor.putString("phon", phone);
        editor.putString("company", company);
        editor.putString("image", photo);
        editor.commit();
    }
}

试图死:

saveLogin = sharedPreferences.getBoolean("saveLogin", true);
    if (saveLogin == true){
        edtEmail.setText(sharedPreferences.getString("user", null));
        edtNome.setText(sharedPreferences.getString("nam", null));
        imgProfileImage.set // I do not know what to do here
    }
  

E / UncaughtException:java.lang.RuntimeException:无法启动活动ComponentInfo {homologa.cappta.com.br.capptahomologa / homologa.cappta.com.br.capptahomologa.Activity.TelaPrincipalActivity}:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'byte [] android.os.Bundle.getByteArray(java.lang.String)'                            在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2830)                            在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2909)                            在android.app.ActivityThread.-wrap11(未知来源:0)                            在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1606)                            在android.os.Handler.dispatchMessage(Handler.java:105)                            在android.os.Looper.loop(Looper.java:164)                            在android.app.ActivityThread.main(ActivityThread.java:6592)                            在java.lang.reflect.Method.invoke(本机方法)                            在com.android.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:240)                            在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:769)                         原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'byte [] android.os.Bundle.getByteArray(java.lang.String)'                            在homologa.cappta.com.br.capptahomologa.Activity.TelaPrincipalActivity.inicializarComponentes(TelaPrincipalActivity.java:180)上                            在homologa.cappta.com.br.capptahomologa.Activity.TelaPrincipalActivity.onCreate(TelaPrincipalActivity.java:101)                            在android.app.Activity.performCreate(Activity.java:6984)                            在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1235)                            在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2783)                            在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2909)                            在android.app.ActivityThread.-wrap11(未知来源:0)                            在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1606)                            在android.os.Handler.dispatchMessage(Handler.java:105)                            在android.os.Looper.loop(Looper.java:164)                            在android.app.ActivityThread.main(ActivityThread.java:6592)                            在java.lang.reflect.Method.invoke(本机方法)                            在com.android.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:240)                            在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:769)   I / Process:正在发送信号。 PID:30923 SIG:9   应用已终止。

5 个答案:

答案 0 :(得分:2)

位图实现了Parcelable接口,所以...

您可以使用可包裹的intent.putExtra()传递位图:

Intent intent = new Intent(this, MyActivity.class);
intent.putExtra("MY_BITMAP", mBitmap);
startActivity(intent);

在新的Activity中,请阅读此额外内容,并从onCreate方法中放置所需的位置:

Bitmap destinationBitmap = (Bitmap) getIntent().getParcelableExtra ("MY_BITMAP");

答案 1 :(得分:0)

您可以使用Glide为Android加载图片库

GlideApp.with(this).load(/*your saved value here*/).into(imgProfileImage);

或者您可以使用Picasso图像库为Android加载

Picasso.get().load(/*your saved value here*/).into(imgProfileImage);

答案 2 :(得分:0)

首先将通过的图像转换为字节数组,然后通过Intent进行传递,然后在下一个活动中,从Bundle中获取字节数组,然后转换为Image(Bitmap)并设置为ImageView。

要将位图转换为Imageview:

Bitmap bitmap= BitmapFactory.decodeResource(getResources(), R.drawable.your_image);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();

将字节数组传递给意图:-

Intent intent = new Intent(this, NextActivity.class);
intent.putExtra("picture", byteArray);
startActivity(intent);

从捆绑中获取字节数组并转换为位图图像:-

Bundle extras = getIntent().getExtras();
byte[] byteArray = extras.getByteArray("picture");

Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
ImageView image = (ImageView) findViewById(R.id.imageView1);

image.setImageBitmap(bmp);

答案 3 :(得分:0)

我建议您使用其他方法(将其存储在效率更高的文件中,减少工作量),因为在活动之间进行转换时,这会导致内存成本和应用程序性能也会受到影响(取决于质量位图)。

如果位图很小(例如缩略图等),则将其作为字节数组传递

chunks

答案 4 :(得分:0)

尝试一下:

使用SharedPreferences这样编辑数据:

 SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPrefsSkip", Context.MODE_PRIVATE);
                            SharedPreferences.Editor editor = pref.edit();
                            editor.putString("username",username); // Storing string
                            editor.putString("phone",phone); 
                            editor.putString("image",image);// Storing string
                            editor.apply();

在下一个活动中获取数据

/* using sharedpref to get data*/
private void getSharedprefData() {
    SharedPreferences prefs = getSharedPreferences("MyPrefsSkip", Context.MODE_PRIVATE);
    username= prefs.getString("username", null);
    phone= prefs.getString("phone", null);
    image= prefs.getString("image", null);
}

使用SharedPreferences在文本视图中设置数据,如下所示:

userName.setText(username);
phone.setText(phone);

使用滑行设置图像,如下所示:

RequestOptions options = new RequestOptions()
            .centerCrop()
            .placeholder(R.drawable.no_preview)
            .error(R.drawable.no_preview)
            .diskCacheStrategy(DiskCacheStrategy.ALL)
            .priority(Priority.HIGH)
            .dontAnimate()
            .dontTransform();

    Glide.with(context)
            .load(image)
            .apply(options)
            .into(uploadiImage);

我希望它能对您有所帮助。