我的设置屏幕上有一张图片,我想将其发送到主屏幕上。
我将其保存在我的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 应用已终止。
答案 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);
我希望它能对您有所帮助。