Объект Android getParcelableExtra всегда возвращает значение null

Итак, я пытаюсь отправить объект из одного действия в другое как Parcelable, но объект на стороне получателя всегда равен нулю. Объект полностью заполняется на стороне отправителя, поэтому я почти уверен, что он должен что-то делать с чтением объекта.

Вот объект Parcelable:

import android.graphics.Bitmap;
import android.os.Parcel;
import android.os.Parcelable;

public class Picture implements Parcelable {

    public String pictureID, title, year, price, author;
    public Bitmap picture;

    public Picture(){
    }

    public int describeContents() {
        return 0;
    }

    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(pictureID);
        dest.writeString(title);
        dest.writeString(year);
        dest.writeString(price);
        dest.writeString(author);
        dest.writeParcelable(picture, flags);
    }

    protected Picture(Parcel in) {
        pictureID = in.readString();
        title = in.readString();
        year = in.readString();
        price = in.readString();
        author = in.readString();
        picture = in.readParcelable(Bitmap.class.getClassLoader());
    }

    public static final Parcelable.Creator<Picture> CREATOR = new Parcelable.Creator<Picture>() {
        public Picture createFromParcel(Parcel source) {
            return new Picture(source);
        }
        public Picture[] newArray(int size) {
            return new Picture[size];
        }
    };
}

Активность отправителя:

Picture firstPic = new Picture();
firstPic.pictureID = "1";
firstPic.title = "Mona Lisa";
firstPic.author = "Leonardo Da Vinci";
firstPic.price = "99999000";
firstPic.year = "2250";
firstPic.picture = BitmapFactory.decodeResource(getApplication().getResources(),R.drawable.monalisa);
Intent i = new Intent(getApplicationContext(),MainScreen.class);
i.putExtra("first",firstPic);
startActivity(i);
finish();

Активность получателя:

Picture currentPicture = new Picture();
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Intent intent = getIntent();
    currentPicture = intent.getParcelableExtra("first");
}

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

РЕДАКТИРОВАНИЕ 2: Проблема решена. Все работало нормально с самого начала, но по какой-то причине я добавил еще немного кода между заполнением объекта данными и putExtra, поэтому в основном я отправлял пустой объект ¯\_(ツ)_/¯


person DisplayName    schedule 03.03.2017    source источник
comment
stackoverflow .com/questions/18166205/   -  person IntelliJ Amiya    schedule 03.03.2017
comment
Что именно вы предлагаете?   -  person DisplayName    schedule 03.03.2017
comment
опубликуйте код после i.putExtra(), где вы начинаете действие   -  person arjun    schedule 03.03.2017
comment
Добавлено в приведенный выше код   -  person DisplayName    schedule 03.03.2017


Ответы (1)


Во-первых, избегайте передачи растровых изображений, они могут быть слишком большими, и извлеките строку "first" в константу класса ReceiverActivity:

public class ReceiverActivity extends ... {
    public static final String EXTRA_FIRST = "first";
    ...
} 

So:

i.putExtra(ReceiverActivity.EXTRA_FIRST,firstPic);

А также

currentPicture = intent.getParcelableExtra(ReceiverActivity.EXTRA_FIRST);

Эта странная вещь уже случилась со мной, я решил ее таким способом.

person betorcs    schedule 03.03.2017
comment
Пробовал, к сожалению, все параметры все еще равны нулю. - person DisplayName; 03.03.2017
comment
попробуй без Bitmap. - person betorcs; 03.03.2017
comment
Я считаю, что это значение по умолчанию, так как я его не устанавливал. - person DisplayName; 03.03.2017