3

Я работаю над приложением, в котором я использую контакты телефона Android в своем приложении. Поэтому, прежде всего, получите контактные данные и сохраните их в ArrayList. После этого я сериализовал этот массивList, используя gson-библиотеку, и когда я десериализую его получение ошибки. Я использовал gson-2.1.jar для сериализации и десериализации контактных данных. Я получаю следующий журнал ошибок.Ошибка при десериализации дескриптора gson с помощью android Studio

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) 

Ниже приводится код, который я использую:

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; 
    } 
+0

Покажите свою JSON и модель –

+0

пожалуйста, напишите код, а также – Akhil

+0

объект, который вы использовали, чтобы читать JSON это неправильно, это должен быть массив, который вы должны читать –

ответ

3

это действительно трудно ответить без ответа JSon вы получаете, но от ошибок вы имеете я могу сказать, следующий код поможет вы

Обновленный то ответ

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; 
} 

Ниже приведены некоторые примеры, которые могут помочь вам с библиотекой Gson

ExampleOne

ExampleTwo