Как передать изображение из действия в другое действие в Android? - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть изображение на экране настроек, я хочу отправить его на домашний экран.

Я сохранил его в общих папках и хочу использовать клавишу на другом экране, как и яс текстами.

Я могу получать тексты и помещать 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.Active6984) в 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 / Процесс: отправка сигнала.PID: 30923 SIG: 9 Приложение прекращено.

Ответы [ 5 ]

0 голосов
/ 04 декабря 2018

Попробуйте это:

Используя 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);

set Image Используя Glide, вот так:

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);

Я надеюсь, что это поможет вам.

0 голосов
/ 29 ноября 2018

Я предлагаю вам использовать другой подход (сохранить его в файле, который более эффективен и требует меньше усилий для вас), поскольку это приводит к затратам памяти и производительности вашего приложения, а также к снижению производительности при переходе между действиями (это зависит от качестваof bitmap).

Если ваше растровое изображение маленькое, например эскиз и т. д., передайте его как байтовый массив

Intent objIntent = new Intent(CurrentActivity.this, DestinationActivity.class);
Bitmap objbitmap; // your bitmap
ByteArrayOutputStream bstream = new ByteArrayOutputStream();
objbitmap.compress(Bitmap.CompressFormat.PNG, 80, bs);
objIntent.putExtra("bitmaparray", bstream.toByteArray());
startActivity(objIntent);
0 голосов
/ 29 ноября 2018

Сначала преобразуйте передаваемое изображение в байтовый массив, а затем передайте его через Intent, а в следующем упражнении получите массив байтов из Bundle, преобразуйте в Image (Bitmap) и установите в ImageView.

Чтобы преобразовать Bitmap в 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);
0 голосов
/ 29 ноября 2018

Bitmap реализует интерфейс Parcelable, поэтому ...

Вы можете передать Bitmap через intent.putExtra () с parcelable:

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

В новой Activity прочитайте это дополнение и положите куда-нибудьхотите от метода onCreate:

Bitmap destinationBitmap = (Bitmap) getIntent().getParcelableExtra ("MY_BITMAP");
0 голосов
/ 29 ноября 2018

Вы можете использовать Glide Загрузка библиотеки изображений для Android

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

Или вы можете использовать Picasso Загрузка библиотеки изображений для Android

Picasso.get().load(/*your saved value here*/).into(imgProfileImage);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...