Getting error in gson deserializing using android Studio

社会主义新天地 提交于 2019-12-23 17:23:30

问题


I am working on an application in which I am using android phone contacts in my application.So, for that first of all fetch contact details and store it into ArrayList. After that I serialized that arrayList using gson library and when I deserialize it getting error. I have used gson-2.1.jar for serializing and deserializing contact details. I am getting following error log.

  AndroidRuntime﹕ FATAL EXCEPTION: main
        com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 8
                at com.google.gson.Gson.fromJson(Gson.java:766)
                at com.google.gson.Gson.fromJson(Gson.java:721)
                at com.google.gson.Gson.fromJson(Gson.java:670)
                at com.google.gson.Gson.fromJson(Gson.java:642)
                at com.braintechnix.autoloveapp.util.MyGson.deserializer(MyGson.java:28)
                at com.braintechnix.autoloveapp.fragment.ContactListFragment.onStart(ContactListFragment.java:69)
                at android.support.v4.app.Fragment.performStart(Fragment.java:1986)
                at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1061)
                at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1207)
                at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
                at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1572)
                at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:493)
                at android.os.Handler.handleCallback(Handler.java:739)
                at android.os.Handler.dispatchMessage(Handler.java:95)
                at android.os.Looper.loop(Looper.java:135)
                at android.app.ActivityThread.main(ActivityThread.java:5312)
                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:901)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)

     Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 8
                at com.google.gson.stream.JsonReader.expect(JsonReader.java:339)
                at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:306)
                at com.google.gson.internal.bind.ArrayTypeAdapter.read(ArrayTypeAdapter.java:70)
                at com.google.gson.Gson.fromJson(Gson.java:755)
                at com.google.gson.Gson.fromJson(Gson.java:721)
                at com.google.gson.Gson.fromJson(Gson.java:670)
                at com.google.gson.Gson.fromJson(Gson.java:642)
                at com.braintechnix.autoloveapp.util.MyGson.deserializer(MyGson.java:28)
                at com.braintechnix.autoloveapp.fragment.ContactListFragment.onStart(ContactListFragment.java:69)
                at android.support.v4.app.Fragment.performStart(Fragment.java:1986)
                at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1061)
                at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1207)
                at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
                at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1572)
                at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:493)
                at android.os.Handler.handleCallback(Handler.java:739)
                at android.os.Handler.dispatchMessage(Handler.java:95)
                at android.os.Looper.loop(Looper.java:135)
                at android.app.ActivityThread.main(ActivityThread.java:5312)
                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:901)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)

Following is the code which I am using:

public ArrayList<Contact> deserializer(String jsonString){

        //Type collectionType = new TypeToken<Collection<Contact>>(){}.getType();
    //  Collection<Contact> enums = gson.fromJson(jsonString, collectionType);

        Contact[] contacts = gson.fromJson(jsonString, Contact[].class);
        ArrayList<Contact> contactsList = new ArrayList<Contact>();
        for(int i = 0; i< contacts.length; i++){
            contactsList.add(contacts[i]);
        }
        return contactsList;
    }

回答1:


it is really hard to answer without the json response you are getting but from the error you have i can tell the following code will help you

Updated the answer

public ArrayList<Contact> deserializer(String jsonString){

    //Type collectionType = new TypeToken<Collection<Contact>>(){}.getType();
//  Collection<Contact> enums = gson.fromJson(jsonString, collectionType);


    ArrayList<Contact> contactsList =  (new Gson()).fromJson(jsonString,new TypeToken<ArrayList<Contact>>() {}.getType());

    return contactsList;
}

following are some example that might help you with Gson library

ExampleOne

ExampleTwo



来源:https://stackoverflow.com/questions/33811133/getting-error-in-gson-deserializing-using-android-studio

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!