我正在关注json
private void share(String text, Uri uri, int type) {
Intent share = new Intent(Intent.ACTION_SEND).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
share.setType("image/*");
switch (type) {
case 2:
share.setPackage("com.whatsapp");
break;
case 3:
share.setPackage("com.facebook.katana");
break;
case 4:
share.setPackage("com.twitter.android");
break;
case 1:
default:
break;
}
share.putExtra(Intent.EXTRA_STREAM, uri);
share.putExtra(Intent.EXTRA_TEXT, text);
startActivity(Intent.createChooser(share, "Select"));
}
来自{"signature": null, "state": "eyJjc3OiIifQ", "tokenId": null, "error": "EXCEPTION_REQUEST_CANCELLED"}
的{{1}}
我尝试检查
jsonObject
条件IF失败,代码转到else块。尝试了另一种方法
JSONObject jsonObject = new JSONObject(authMeta);
以上也失败了。
if(jsonObject.get("signature") == null) {} else {}
工作。
以下代码有效。
if(jsonObject.get("signature").toString().isEmpty())
我检查了isNull方法内部,发现以下内容。
if(jsonObject.get("signature").equals(null))
无法理解为什么null不同?
答案 0 :(得分:1)
因为org.json.JSONObject.get(java.lang.String key)
将返回java.lang.Object
。
所以...
jsonObject.get("signature") == null
这不起作用,因为Java中的==
用于比较基元和对象。然后==
根据内存引用比较两个对象。因此==
运算符仅在与其比较的两个对象引用表示完全相同的对象时才返回true。
jsonObject.get("signature").equals(null)
之所以可行,是因为我们使用了equals()
方法来比较Java中的对象。为了确定两个对象是否相同,equals()
比较对象属性的值。
让我们看下面的示例:
System.out.println(obj.get("signature").getClass()); //class org.json.JSONObject$Null
System.out.println(obj.get("state").getClass()); //class java.lang.String
System.out.println(JSONObject.NULL.getClass()); //class org.json.JSONObject$Null
您可以看到第一个语句返回Object
,第二个语句返回String
。这就是为什么您使用equals()
进行null检查的原因。