为什么即使我防范了零点异常,我也会得到零点异常?

  • 本文关键字:异常 零点 android kotlin null
  • 更新时间 :
  • 英文 :


如何防止空分?我尝试了这种方式:

var spr = context.getSharedPreferences("FAV", Context.MODE_PRIVATE)
var emptyArray: JsonArray = jsonArray()
var myjson = spr.getString("KEY", null)
//GET JSON FROM SHARED PREFERENCE
Log.d("TAG", "NOT NULL")
if(myjson != null) {
var parsedFavFromJson = Gson().fromJson<List<String>>(myjson)
//PARSE FROM JSON TO ARRAY
for (i in parsedFavFromJson) {
emptyArray.add(i)
Log.d("TAG", "" + i)
if (i == recipeArray!![counterX].recipeKey!!) {
Picasso.with(context)
.load(R.drawable.fav_icon_60at3x).into(favMarkerButton)
Log.d("TAG", "Match " + i)
} else {
Log.d("TAG", "WAS NULL")
Picasso.with(context)
.load(R.drawable.fav_unclicked_icon60at3x).into(favMarkerButton)
}
}
}

我已经清楚地说明了条件if(myjson != null),它仍然通过并崩溃并显示错误消息java.lang.IllegalStateException: fromJson(json, typeToken<T>()) must not be null。没有明确指示错误实际发生的位置 - 它实际上指向一个空代码行!如果我删除上面的代码,一切正常。我也尝试使用:

var myjson = spr.getString("KEY", null).let {

。等等,结果是一样的。我在这里错过了什么吗?

更新我检查了变量myjson,它显然null.问题是为什么有条件的if(myjson != null)通过了...

简而言之,你错过了问号。

您希望在块中:

spr.getString("KEY", null).let { it }

不会为空吗?这是不正确的。

正确的语法是

spr.getString("KEY", null)?.let { it }

容易错过。

使用嵌套 JSON 也是如此。你永远不应该在 Kotlin 中使用 bang-bang (!!(。请改用安全语法:

recipeArray?[counterX].recipeKey

相关内容

  • 没有找到相关文章

最新更新