I have the following 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"
}
}
]
}
which I need to save to shared preferences and get back later.
Code to save json works fine
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();
}
But when getting it back to the ChannelListResponse object of google api client library with below code
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;
}
I get the following exception
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
How can I save the object and get it back properly ?