gpt4 book ai didi

java - Android - 错误 java.lang.UnsupportedOperationException : JsonNull

转载 作者:行者123 更新时间:2023-12-01 14:11:02 48 4
gpt4 key购买 nike

我正在尝试在我的应用程序中使用 JSON 字符串、Retrofit 和其他东西。但是在这个特定的模型中,有些东西使我的 JSON 字符串为空。

这是我反序列化字符串的方法:

public static class TaskGSON implements JsonSerializer<Task>, JsonDeserializer<Task>{

@Override
public Task deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
System.out.println(json.toString());
if (!json.isJsonNull()) {
final JsonObject jsonObject = json.getAsJsonObject();
Task t = new Task();
t.mId = jsonObject.get(NAMES.Server.ID).getAsString();
t.mProjectId = jsonObject.get(NAMES.Server.PROJECT_ID).getAsString();
t.mTitle = jsonObject.get(NAMES.Server.TITLE).getAsString();
t.mPriority = Priority.deSerialize(jsonObject.get(NAMES.Server.PRIORITY).getAsString());
t.mCreatedAt = context.deserialize(jsonObject.get(NAMES.Server.CREATED_AT), Date.class);
t.mCreatedById = jsonObject.get(NAMES.Server.CREATED_BY_ID).getAsString();
t.mUpdatedAt = context.deserialize(jsonObject.get(NAMES.Server.UPDATED_AT), Date.class);
t.mFeedCount = jsonObject.get(NAMES.Server.FEED_COUNT).getAsInt();
t.mPermissions = context.deserialize(jsonObject.get(NAMES.Server.PERMISSIONS), new TypeToken<List<Permission>>() {}.getType());

if (jsonObject.has(NAMES.Server.COLLECTION_ID)) {
t.mCollectionId = jsonObject.get(NAMES.Server.COLLECTION_ID).getAsString();
}

if (jsonObject.has(NAMES.Server.DESCRIPTION)) {
t.mDescription = jsonObject.get(NAMES.Server.DESCRIPTION).getAsString();
}
if (jsonObject.has(NAMES.Server.DUE_DATE) && !jsonObject.get(NAMES.Server.DUE_DATE).isJsonNull()) {
t.mDueDate = context.deserialize(jsonObject.get(NAMES.Server.DUE_DATE), Date.class);
}

if (jsonObject.has(NAMES.Server.COMPLETED_AT)) {
t.mCompletedAt = context.deserialize(jsonObject.get(NAMES.Server.COMPLETED_AT), Date.class);
}

if (jsonObject.has(NAMES.Server.COMPLETED_BY_ID)) {
t.mCompletedById = jsonObject.get(NAMES.Server.COMPLETED_BY_ID).getAsString();
}

if (jsonObject.has(NAMES.Server.DELETED_AT)) {
t.mDeletedAt = context.deserialize(jsonObject.get(NAMES.Server.DELETED_AT), Date.class);
}

if (jsonObject.has(NAMES.Server.COMPLETED)) {
t.mCompleted = jsonObject.get(NAMES.Server.COMPLETED).getAsBoolean();
}

if (jsonObject.has(NAMES.Server.CHECKLIST)) {
t.mChecklists = context.deserialize(jsonObject.get(NAMES.Server.CHECKLIST), new TypeToken<List<Checklist>>() {}.getType());
}

if (jsonObject.has(NAMES.Server.ATTACHMENTS)) {
t.mAttachments = context.deserialize(jsonObject.get(NAMES.Server.ATTACHMENTS), new TypeToken<List<Attachment>>() {}.getType());
}

if (jsonObject.has(NAMES.Server.MARKERS)) {
t.mMarkers = context.deserialize(jsonObject.get(NAMES.Server.MARKERS), new TypeToken<List<Marker>>() {}.getType());
}
if (jsonObject.has(NAMES.Server.CATEGORY_ID)) {
t.mCategory = jsonObject.get(NAMES.Server.CATEGORY_ID).getAsString();
}

return t;
} else {
return null;
}
}

所以,问题是,当我注释检查我的 JSON 字符串中是否有字段“description”和“categoryId”的代码行时,我没有收到错误,但是如果我取消注释这些 if 语句,我会收到错误说Json为空。我不知道为什么。

这是完整的 logcat:
09-22 17:02:57.890 21172-26613/com.construct.test E/AbstractEntitiesViewModel: Error java.lang.UnsupportedOperationException: JsonNull
at com.google.gson.JsonElement.getAsString(JsonElement.java:191)
at com.construct.v2.models.entities.task.Task$TaskGSON.deserialize(Task.java:740)
at com.construct.v2.models.entities.task.Task$TaskGSON.deserialize(Task.java:717)
at com.google.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:69)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:82)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)
at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:37)
at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:25)
at retrofit2.ServiceMethod.toResponse(ServiceMethod.java:119)
at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:218)
at retrofit2.OkHttpCall.execute(OkHttpCall.java:180)
at retrofit2.adapter.rxjava.CallExecuteOnSubscribe.call(CallExecuteOnSubscribe.java:40)
at retrofit2.adapter.rxjava.CallExecuteOnSubscribe.call(CallExecuteOnSubscribe.java:24)
at retrofit2.adapter.rxjava.BodyOnSubscribe.call(BodyOnSubscribe.java:36)
at retrofit2.adapter.rxjava.BodyOnSubscribe.call(BodyOnSubscribe.java:28)
at rx.Observable.unsafeSubscribe(Observable.java:10256)
at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:48)
at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:33)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
at rx.Observable.unsafeSubscribe(Observable.java:10256)
at rx.internal.operators.OperatorMerge$MergeSubscriber.onNext(OperatorMerge.java:248)
at rx.internal.operators.OperatorMerge$MergeSubscriber.onNext(OperatorMerge.java:148)
at rx.internal.operators.OnSubscribeFromArray$FromArrayProducer.fastPath(OnSubscribeFromArray.java:76)
at rx.internal.operators.OnSubscribeFromArray$FromArrayProducer.request(OnSubscribeFromArray.java:58)
at rx.Subscriber.setProducer(Subscriber.java:211)
at rx.internal.operators.OnSubscribeFromArray.call(OnSubscribeFromArray.java:32)
at rx.internal.operators.OnSubscribeFromArray.call(OnSubscribeFromArray.java:24)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
at rx.Observable.unsafeSubscribe(Observable.java:10256)
at rx.internal.operators.OperatorSubscribeOn$SubscribeOnSubscriber.call(OperatorSubscribeOn.java:100)
at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)

字段描述和类别都可以为空,但它们存在于我的 Json 中。这很奇怪,因为当我评论这些行时它工作得很好。

最佳答案

您应该从 yourJsonObject.getAsString() 更改至yourJsonObject.toString()

关于java - Android - 错误 java.lang.UnsupportedOperationException : JsonNull,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46372540/

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