Почему мой Parcelable возвращает null?

339
10 февраля 2017, 03:26

Дано: при нажатии на кнопку из адаптера во фрагмент передается Parcelable:

public void onItemClick(Category category) {
    String type;
    if (TYPE) {
        type = "addIncomeItem";
    } else {
        type = "addCostsItem";
    }
    getApplicationContext().sendBroadcast(new Intent(type).putExtra("myObj", category));
    finish();
}

В активити не могу получить его, всегда получаю null, хотя во время дебага вижу что объект передается (пример на скрине):

Скрин при получении в активити:

В чем может быть проблема?

Parcelable класс на всякий случай:

public class Category implements Parcelable {
    public String name;
    public int photoId;
    public Category(String name, int photoId) {
        this.name = name;
        this.photoId = photoId;
    }
    public String getName() {
        return name;
    }
    //parcel part
    public Category(Parcel in){
        String[] data= new String[2];
        in.readStringArray(data);
        this.name= data[0];
        this.photoId= Integer.parseInt(data[1]);
    }
    @Override
    public int describeContents() {
        return 0;
    }
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeStringArray(new String[]{this.name, String.valueOf(this.photoId)});
    }
    public static final Parcelable.Creator<Category> CREATOR= new Parcelable.Creator<Category>() {
        @Override
        public Category createFromParcel(Parcel source) {
            return new Category(source);  //using parcelable constructor
        }
        @Override
        public Category[] newArray(int size) {
            return new Category[size];
        }
    };
}
Answer 1

Проблема в том, что Вы извлекаете данные не из того интента.

На втором скриншоте видно, что Вы получаете интент, который пришел в активити при ее старте, однако Вам нужен тот интент, который пришел в метод onReceive(...).

В методе onReceive(...) пропишите:

Category test = intent.getParcelableExtra("myObj");
addItem(test);
READ ALSO
Эффективный дебаг рекурсии

Эффективный дебаг рекурсии

Хочу создать сбалансированное, отсортированное дерево, для того чтобы отрабатывать методы вставки, поиска, подсчета размера и глубины дерева

269
Нужен алгоритм java

Нужен алгоритм java

Создаем массив чисел от 1 до 75, с помощью рандома чисел от 1 до 75 начинаем поиск элемента в массивеСовпал - удалили

316
изменение стиля TableView javafx

изменение стиля TableView javafx

есть таблица с пятью столбцами

507