Vih*_*rma 5 android json gson google-api-client jackson2
我有以下json
{
"kind": "youtube#channelListResponse",
"etag": "\"cbz3lIQ2N25AfwNr-BdxUVxJ_QY/QM4kW8nb-nymx1biZnF8bIvgOfE\"",
"pageInfo": {
"totalResults": 1,
"resultsPerPage": 1
},
"items": [
{
"kind": "youtube#channel",
"etag": "\"cbz3lIQ2N25AfwNr-BdxUVxJ_QY/y82-gQyDEMJUwKI8hgUfyTzHck8\"",
"id": "UC_x5XG1OV2P6uZZ5FSM9Ttw",
"snippet": {
"title": "Google Developers",
"description": "The Google Developers channel, offers lessons, talks, the latest news & best practices. Learn Android, Chrome, Web Development, Polymer, Performance, iOS & more!\n\nTake advantage of this resource by subscribing to the official Google Developers channel here: https://www.youtube.com/channel/UC_x5XG1OV2P6uZZ5FSM9Ttw?sub_confirmation=1\n \nFollow Google Developers on Twitter: https://twitter.com/googledevs\n\nFollow Google Developers on Google+: https://plus.google.com/+GoogleDevelopers\n\nCheck out the Google Developers Blog: http://googledevelopers.blogspot.com/",
"customUrl": "googlecode",
"publishedAt": "2007-08-23T00:34:43.000Z",
"thumbnails": {
"default": {
"url": "https://yt3.ggpht.com/-Fgp8KFpgQqE/AAAAAAAAAAI/AAAAAAAAAAA/Wyh1vV5Up0I/s88-c-k-no-mo-rj-c0xffffff/photo.jpg"
},
"medium": {
"url": "https://yt3.ggpht.com/-Fgp8KFpgQqE/AAAAAAAAAAI/AAAAAAAAAAA/Wyh1vV5Up0I/s240-c-k-no-mo-rj-c0xffffff/photo.jpg"
},
"high": {
"url": "https://yt3.ggpht.com/-Fgp8KFpgQqE/AAAAAAAAAAI/AAAAAAAAAAA/Wyh1vV5Up0I/s240-c-k-no-mo-rj-c0xffffff/photo.jpg"
}
},
"localized": {
"title": "Google Developers",
"description": "The Google Developers channel, offers lessons, talks, the latest news & best practices. Learn Android, Chrome, Web Development, Polymer, Performance, iOS & more!\n\nTake advantage of this resource by subscribing to the official Google Developers channel here: https://www.youtube.com/channel/UC_x5XG1OV2P6uZZ5FSM9Ttw?sub_confirmation=1\n \nFollow Google Developers on Twitter: https://twitter.com/googledevs\n\nFollow Google Developers on Google+: https://plus.google.com/+GoogleDevelopers\n\nCheck out the Google Developers Blog: http://googledevelopers.blogspot.com/"
}
},
"contentDetails": {
"relatedPlaylists": {
"uploads": "UU_x5XG1OV2P6uZZ5FSM9Ttw",
"watchHistory": "HL",
"watchLater": "WL"
}
},
"statistics": {
"viewCount": "123396411",
"commentCount": "393",
"subscriberCount": "1239356",
"hiddenSubscriberCount": false,
"videoCount": "4514"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
我需要将其保存到共享首选项并稍后返回。
保存json的代码工作正常
public static void addSelectedYoutubeAccounts(Context context, ChannelListResponse response) {
Gson gson = new Gson();
SharedPreferences sp = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
String data = response.toString();
// data = gson.toJson(response); // didn't work either
editor.putString(PREF_SELECTED_YOUTBE_ACCOUNTS, data);
editor.commit();
}
Run Code Online (Sandbox Code Playgroud)
但是当使用以下代码将其返回到 google api 客户端库的 ChannelListResponse 对象时
public static ChannelListResponse getSelectedYoutubeAccounts(Context context) {
Gson gson = new Gson();
SharedPreferences sp = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
String data = sp.getString(PREF_SELECTED_YOUTBE_ACCOUNTS, "");
ChannelListResponse response = gson.fromJson(data, ChannelListResponse.class);
return response;
}
Run Code Online (Sandbox Code Playgroud)
我收到以下异常
21:02:24.041 3064-3064/video.uploader8266.testing.debug123 E/AndroidRuntime: FATAL EXCEPTION: main
Process: video.uploader8266.testing.debug123, PID: 3064
java.lang.RuntimeException: Unable to start activity ComponentInfo{video.uploader8266.testing.debug123/com.example.vihaan.videouploaderfacebook.ui.postPreviewScreen.PostPreviewActivity}: java.lang.IllegalArgumentException: field com.google.api.services.youtube.model.ChannelListResponse.pageInfo has type com.google.api.services.youtube.model.PageInfo, got com.google.gson.internal.LinkedTreeMap
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.lang.IllegalArgumentException: field com.google.api.services.youtube.model.ChannelListResponse.pageInfo has type com.google.api.services.youtube.model.PageInfo, got com.google.gson.internal.LinkedTreeMap
at java.lang.reflect.Field.set(Native Method)
at com.google.api.client.util.FieldInfo.setFieldValue(FieldInfo.java:245)
at com.google.api.client.util.FieldInfo.setValue(FieldInfo.java:206)
at com.google.api.client.util.GenericData.put(GenericData.java:103)
at com.google.api.client.util.GenericData.put(GenericData.java:47)
at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:188)
at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:145)
at com.google.gson.Gson.fromJson(Gson.java:888)
at com.google.gson.Gson.fromJson(Gson.java:853)
at com.google.gson.Gson.fromJson(Gson.java:802)
at com.google.gson.Gson.fromJson(Gson.java:774)
at com.example.vihaan.videouploaderfacebook.util.SharedPreferenceManager.getSelectedYoutubeAccounts(SharedPreferenceManager.java:82)
at com.example.vihaan.videouploaderfacebook.ui.postPreviewScreen.PostPreviewFragment.initYoutubeAccounts(PostPreviewFragment.java:156)
at com.example.vihaan.videouploaderfacebook.ui.postPreviewScreen.PostPreviewFragment.initAccounts(PostPreviewFragment.java:148)
at com.example.vihaan.videouploaderfacebook.ui.postPreviewScreen.PostPreviewFragment.initState(PostPreviewFragment.java:137)
at com.example.vihaan.videouploaderfacebook.ui.postPreviewScreen.PostPreviewFragment.onViewCreated(PostPreviewFragment.java:132)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1430)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1740)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1809)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:799)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2580)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2367)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2322)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2229)
at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3221)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3171)
at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:192)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:560)
at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1248)
10-23 21:02:24.041 3064-3064/video.uploader8266.testing.debug123 E/AndroidRuntime: at android.app.Activity.performStart(Activity.java:6696)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2628)
... 9 more
Run Code Online (Sandbox Code Playgroud)
如何保存对象并正确取回它?
| 归档时间: |
|
| 查看次数: |
506 次 |
| 最近记录: |