此刻在我的代码中碰到一堵砖墙,用于从AsyncTask中的多个页面(使用循环)中获取json对象。它到达最后一页,但是获取正确的if语句以确保循环DOESN再次运行并继续运行令我感到困惑。
String data = //some correct json data with next element that holds a uri parseable string
JSONObject initial = new JSONObject(data);
String next = initial.getString(nextObjSTR);
//gonna start from the "last" page and recursively return to the 1st page
if(*The if condition I need help with*) {
//there is another page
makeConnection(Uri.parse(next));
}
基本上,json元素的最后一页有一个null或没有元素值的下一个元素,它会触发IOException
方法中捕获的makeConnection
错误,因为我的初始if语句一直都失败了。
如果从json检查字符串,我可以得到适当的理由或帮助吗?如果我使用String != null
中的任何方法进行比较,我就会NullPointerExceptions
尝试String
。同样,JsonObject.NULL
比较也不适用于我。
答案 0 :(得分:2)
其他答案都没有奏效,我最后质疑该元素是否真的为空,尽管通过在线工具查看解析的json数据。最后,JSONObject.IsNull(元素映射名称)是正确的方法。
答案 1 :(得分:1)
如果您确定该值为null(空)或正确的URI,并假设nextObjSTR
密钥始终存在于data
JSON中,那么这样做:
if (next != null && !next.trim().isEmpty()) {
makeConnection(Uri.parse(next));
}
或者,既然你已经在Android上了,那么最好使用更方便的方法:
if (!TextUtils.isEmpty(next)) {
makeConnection(Uri.parse(next));
}
答案 2 :(得分:0)
您可以使用JSONObject的optString方法。如果JSON键不是,则此方法将返回一个空字符串,因此您可以轻松地检查它:
=divide_by_2_5(D1)
来源:https://developer.android.com/reference/org/json/JSONObject.html#optString(java.lang.String)
答案 3 :(得分:0)
你必须在json对象中检查带有键的值。 请尝试以下代码:
JSONObject initial = new JSONObject(data);
if(initial.has(nextObjSTR)) {
String next = initial.getString(nextObjSTR);
if (next != null && !next.isEmpty()) {
makeConnection(Uri.parse(next));
}
}
答案 4 :(得分:0)
我喜欢这样...
String value;
if(jsonObject.get("name").toString.equals("null")){
value = "";
else{
value = jsonObject.getString("name");
}