【问题标题】:NullPointerException after returning value using enum使用枚举返回值后出现 NullPointerException
【发布时间】:2020-12-15 23:04:45
【问题描述】:

我的转换器类:

public class CategoriesConverter extends Item_get {
    @TypeConverter
    public static Item_get.Food_type toFood_type(int food_type){
        if(food_type == SWEETS.getCode()){
            return SWEETS;
        }else if(food_type == DRINKS.getCode()){
            return DRINKS;
        }else if(food_type == OTHER.getCode()){
            return OTHER;
        }else {
            throw new IllegalArgumentException("Error Status");
        }
    }

    @TypeConverter
    public static int toInt(Item_get.Food_type food_type){
        return food_type.getCode();
    }
}

在我的Recyclerview 中,当我点击编辑图片时,我会像这样放入下一个活动数据:

@Override
public void onEditClick(Item_get item_get) {
    Intent intent = new Intent(getActivity(), Edit_Delete_details.class);
    intent.putExtra("KEY1", item_get);
    intent.putExtra(Edit_Delete_details.EXTRA_ID, item_get.getId());
    start_next_activity.launch(intent);
}

在第二个活动中,我这样做:

intent = getIntent();
item_get = intent.getParcelableExtra("KEY1");
id = intent.getIntExtra(EXTRA_ID, default: -1);
name = item_get.getName_Product();
amount = item_get.getAmount();
Item_get.Food_type food_type = item_get.food_type.getCode();

上面带有food_type 的行总是返回null,我不知道为什么,因为在第一个活动中这样的东西效果很好:

String f = String.valueOf(item_get.food_type); <-- Return String representation of enum like: SWEETS
OR 
int n = item_get.food_type.getCode(); <-- Return integer of actually selected enum category like: 1

当我这样做时:

int n = item_get.food_type.getCode();
intent.putExtra("LINK", n);

效果很好。我在活动 2 中有它。

但为什么我不能将它与整个 item_get 对象一起发送?就像 Name Product 和 Amount 一样,我必须把它放到第二个变量中?

问题是当我想将数据从活动 2 发送回活动 1 时,我收到如下错误:

原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“int com.example.project.Item_get$Food_type.getCode()”

当我更改 CategoriesConverter 类时:

@TypeConverter
public static int toInt(Item_get.Food_type food_type){
    From
    return food_type.getCode();
    to
    return 1;
}

不会发生错误(这不是解决方案),但可能是提示。

我的 Item_get.class 有 enum 像这样:

public enum Food_type{
    SWEETS(1),
    DRINKS(2),
    OTHER(3);
    private int code;
    Food_type(int code){
        this.code = code;
    }
    public int getCode(){
        return code;
    }
}

我还在数据库中添加了@TypeConverters。
我读过枚举是 parcelabe 对象。
我正在使用RoomDatabase
那么为什么我从活动 1 更改为活动 2 后得到空对象?

【问题讨论】:

  • 请添加堆栈跟踪

标签: java android android-room


【解决方案1】:

我认为枚举不是可包裹的,而是可序列化的。不过,您可以通过实现接口使它们可打包。

我个人会将代码添加为额外的意图,然后在另一边读回。这是一个小负载,你不必实现 parcelable。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    相关资源
    最近更新 更多