如何防范零分?我尝试过这种方式:
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)
通过了...
答案 0 :(得分:0)
简而言之,您错过了问号。
您希望在代码段中输入
spr.getString("KEY", null).let { it }
不会为空吗?那是不对的。
正确的语法是
spr.getString("KEY", null)?.let { it }
容易错过。
使用嵌套JSON也是一样。您永远不要在Kotlin中使用bang-bang(!!
)。请改用安全语法:
recipeArray?[counterX].recipeKey