我开始将Kotlin与Java一起使用。 这下面是java中的代码。不引发空指针异常
initFoodQuantitySpinner();
CartDb cartDb = new CartDb(getActivity());
try {
P.addToCart(getActivity(), food.getId(), food.getPrice(), foodQuantity);
} catch (Exception e) {
e.printStackTrace();
}
FoodCartModel foodCartModel = new FoodCartModel(new Food(food.getId(),
food.getName(), 0, "", "",
food.getPrice(), 0,
0, null, "", "", null));
cartDb.insertFood(foodCartModel);
if (getActivity() != null)
getActivity().invalidateOptionsMenu();
以下Kotlin中的代码抛出空指针异常。
spinFoodQuantity.visibility = View.VISIBLE
val cartDb = CartDb(context)
val id = food.id
val name = food.name
val price = food.price
try {
P.addToCart(activity, id, price, foodQuantity)
} catch (e: Exception) {
e.printStackTrace()
}
val foodCartModel = FoodCartModel(
Food(id, name, 0, "", "", price, 0,
0, null!!, "", "", null!!),
foodQuantity)
cartDb.insertFood(foodCartModel)
activity!!.invalidateOptionsMenu()
在共享首页中添加到购物车功能
public static synchronized void addToCart(Context context, int id, int price, int quantity)
throws JSONException {
assurePrefNotNull(context);
String data = getCartData(context);
JSONArray array;
if (data.equals(""))
array = new JSONArray();
else array = new JSONArray(data);
JSONObject item = new JSONObject();
item.put("id", id);
item.put("price", price);
item.put("quantity", quantity);
array.put(item);
prefsEditor.putString(PREF_CART_DATA, array.toString());
prefsEditor.commit();
}
任何人都可以解释kotlin抛出空指针异常的错误吗?和android studio显示有关无法访问的代码的警告(对于kotlin中的以下代码)
val foodCartModel = FoodCartModel(
Food(id, name, 0, "", "", price, 0,
0, null!!, "", "", null!!),
foodQuantity)
cartDb.insertFood(foodCartModel)
activity!!.invalidateOptionsMenu()
答案 0 :(得分:4)
!!
会抛出KotlinNullPointerException。例如:
var n: String? = null;
//changes to n based on whatever; not at all relevant. Should it end up as null afterwards
println(n!!)//throw an exception when something is done with it
如果n为null,则抛出异常。
当你执行null!!
时,它总是抛出一个异常,因为null显然是null,并且永远不会有实际值。
因为它总是会抛出异常,所以下面的代码将无法访问。它与:
相同var n: String = "some string"
throw RuntimeException();//different exception obviously, but the idea is the same
println(n);//unreachable code
如果您可以使用可为空的参数,请在Java中的字段中添加@Nullable
,或在Kotlin中的类型后添加?
以允许参数保持为null。我提到了两个问题,因为你在问题中同时拥有Java和Kotlin代码,但是你没有添加Food
类。如果您不允许可为空的参数,请不要在第一个位置传递null。而且最终没有非空断言