gpt4 book ai didi

android - instanceof JSONObject 不检测 JSONObject

转载 作者:太空宇宙 更新时间:2023-11-03 13:51:02 25 4
gpt4 key购买 nike

我发现 variable instanceof JSONObject 有奇怪的行为。我有以下代码:

Object value;
try {
value = customer.get(key);
Log.v("type", String.valueOf(value.getClass())); // Returns JSONObject
if (value instanceof JSONObject) {
// Handle JSONObject
} else {
String text = (String)value; // HERE COMES THE ERROR
// Handle String
}

当日志返回 JSONObject 时,它以异常结束:

01-15 12:24:46.206 4111-4111/cz.jacon.goldympos V/CUSTOMER type: class org.json.JSONObject$1
01-15 12:24:46.207 4111-4111/cz.jacon.goldympos D/AndroidRuntime: Shutting down VM
01-15 12:24:46.279 4111-4111/cz.jacon.goldympos E/AndroidRuntime: FATAL EXCEPTION: main
Process: cz.jacon.goldympos, PID: 4111
java.lang.RuntimeException: Unable to start activity ComponentInfo{cz.jacon.goldympos/cz.jacon.goldympos.activities.CustomerDetailActivity}: java.lang.ClassCastException: org.json.JSONObject$1 cannot be cast to java.lang.String
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.ClassCastException: org.json.JSONObject$1 cannot be cast to java.lang.String
at cz.jacon.goldympos.activities.CustomerDetailActivity.getText(CustomerDetailActivity.java:260)
at cz.jacon.goldympos.activities.CustomerDetailActivity.createLayout(CustomerDetailActivity.java:222)
at cz.jacon.goldympos.activities.CustomerDetailActivity.onCreate(CustomerDetailActivity.java:92)
at android.app.Activity.performCreate(Activity.java:5990)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
...........

我错过了什么吗?看起来很简单...

编辑:json

我使用的 json 示例。第一个是 JSONObject,第二个是 Integer(可以转换为 String)

{
"viewers_edit_time":
{
"date":"2016-01-14 22:53:56.000000",
"timezone_type":3,
"timezone":"Asia/Kolkata"
},
"viewers_edit_users_id":1
}

That's full json ,和我用的完全一样。再说一遍:

Log.v("type", String.valueOf(value.getClass())); // Returns JSONObject not JSONObject$1

已解决

问题解决了。从我有问题发布的完整 JSON 中:

"viewers_postcode": null

我没有注意到 null 不在引号中......在我认为我是“null”之前,它是 String。我被错误消息弄错了,它说 JSONObject$1 cannot be cast to String。但是 JSONObject$1 是 NULL(感谢@Natix)

也许它可以帮助其他有相同错误消息的人。

最佳答案

您需要特别注意日志消息。重点是 org.json.JSONObject$1org.json.JSONObject相同。

$1 后缀表示它是 JSONObject 类的匿名内部类。如果你看the source ,你会发现这段代码:

public static final Object NULL = new Object() {
@Override public boolean equals(Object o) {
return o == this || o == null; // API specifies this broken equals implementation
}
@Override public String toString() {
return "null";
}
};

这意味着您应该首先检查您的值是否等于此 NULL 常量:

Object value = customer.get(key);
if (value == JSONObject.NULL {
// Handle NULL
} else if (value instanceof JSONObject) {
// Handle JSONObject
} else {
// Handle String
}

关于android - instanceof JSONObject 不检测 JSONObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34810414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com