Я нашел странное поведение variable instanceof JSONObject
. У меня следующий код:instanceof JSONObject не обнаруживает 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)
...........
я упускаю что-то? Это выглядит так просто ...
EDIT: JSON
Пример JSON Я использованием. Во-первых это JSONObject, второй является Integer (может быть литыми в строку)
{
"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
я не заметил, что нуль не в кавычках ... Раньше я думал, что я был «нулевым», который является строкой. Я ошибался сообщением об ошибке, которое я получил, которое говорит JSONObject$1 cannot be casted to String
. Но JSONObject $1
является NULL (кредиты @Natix)
Возможно, это помогает другим людям с тем же сообщением об ошибке.
Я думаю, что 'Object' не может быть экземпляром 'JSONObject', поскольку' Object' является супер. Условие всегда будет ложным. –
Опубликовать Json & Code, чтобы дать правильный ответ. –
Вы уверены, что ошибка подходит к этой строке? Здесь я не нахожу ничего плохого. – Rohit5k2