5

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 ?

Linda Lawton - DaImTo
  • 106,405
  • 32
  • 180
  • 449
Vihaan Verma
  • 12,815
  • 19
  • 97
  • 126
  • `com.google.api.services.youtube.model.ChannelListResponse.pageInfo has type com.google.api.services.youtube.model.PageInfo, got com.google.gson.internal.LinkedTreeMap` – Bishan Oct 24 '17 at 09:09
  • add ChannelListResponse model class – Pavya Oct 24 '17 at 09:22
  • They are coming from google libraries compile('com.google.api-client:google-api-client-android:1.23.0') { exclude group: 'org.apache.httpcomponents' } compile('com.google.apis:google-api-services-youtube:v3-rev186-1.23.0') { exclude group: 'org.apache.httpcomponents' } – Vihaan Verma Oct 24 '17 at 09:36
  • @VihaanVerma did you manage to work this out? I am facing the same issue – DarkCygnus May 05 '18 at 00:44

0 Answers0