2015-06-30 4 views
3

я получаю ошибку StackTrace ниже каждый раз, когда я реализоватьизвлечения данных из firebase

GenericTypeIndicator<List<String>> t = new GenericTypeIndicator<List<String>>() { 
     }; 
     GenericTypeIndicator<List<String>> t2 = new GenericTypeIndicator<List<String>>() {}; 
     List<String> namelist = snapshot.child("Driver name").getValue(t); 
     List<String> carlist = snapshot.child("Drivers car").getValue(t2); 
     if (namelist!=null & carlist!=null){ 


     for(int wee=0;wee<namelist.size();wee++){ 
      driver.add(new Driver(namelist.get(wee).toString(),carlist.get(wee).toString())); 
     } 

Данные, я послал firebase хранится в виде:

"DriversList" : { 
    "Driver name" : { 
     "-Js6OJniEqVZAYSNhqbB" : "gvvb", 
     "-Js7GjPMGNOLurrKk9rC" : "iggvv", 
     "-Js7GlUlCwIoljJxpFbZ" : "iiggv", 
     "-Js7GnBCRogiFUfn-ncZ" : "ihccvv", 
     "-Js7GqGxH2vLYK5tsjjP" : "hhvv", 
     "-Js7Gs80AoB5eeWci6jW" : "hhgc", 
     "-Js7Gtm6AGh_QaTUK6fQ" : "ugghh", 
     "-Js7GyomOIzjtVo3-PVg" : "tyygff", 
     "-JsPxEhf4tx7O4v7JWMc" : "", 
     "-JsQBoMqVBF4SzOHF3WA" : "rr", 
     "-JsQC6TuGqHrBBkdalik" : "eed" 
    }, 
    "Drivers availability" : { 
     "-Js6OJozSuUvj5JnuNnW" : "No", 
     "-Js7GjQ_5YgmnEYKWHrL" : "No", 
     "-Js7GlVm7onoQd59Yyfq" : "No", 
     "-Js7GnDPdjseoRVjgwSn" : "No", 
     "-Js7GqIYy4VSEqu9qZfC" : "No", 
     "-Js7Gs8VP5mp5bOR1pxR" : "No", 
     "-Js7Gtmfv2M2p201k3Ra" : "No", 
     "-Js7Gyvf8JkGwBlh8ZLu" : "No", 
     "-JsPxEly9iGncA4VWvn2" : "No", 
     "-JsQBoOE6AbGy1VMBSWp" : "No", 
     "-JsQC6wGzBXBMz76IXue" : "No" 
    }, 
    "Drivers car" : { 
     "-Js6OJoyDlc4DR0IQhJr" : "gvgh", 
     "-Js7GjQZ6Sb7AOooABt3" : "nbcgg", 
     "-Js7GlVajAA1B5PeBnn2" : "nvvuuu", 
     "-Js7GnDOCiWM874f6iL6" : "", 
     "-Js7GqIYy4VSEqu9qZfB" : "nbcxx", 
     "-Js7Gs8VP5mp5bOR1pxQ" : "hbccf", 
     "-Js7Gtmfv2M2p201k3R_" : "hvccf", 
     "-Js7Gyvf8JkGwBlh8ZLt" : "gghhhg", 
     "-JsPxElx9XXm0kVLFstN" : "", 
     "-JsQBoOE6AbGy1VMBSWo" : "dd", 
     "-JsQC6wF0zgLApv8SwJO" : "ff" 
    } 

Ошибка из трассировки стека:

06-30 14:35:44.918 2736-2736/com.kate.teme E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    com.firebase.client.FirebaseException: Failed to bounce to type 
      at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:208) 
      at com.kate.teme.AdminContent$2.onDataChange(AdminContent.java:105) 
      at com.firebase.client.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:45) 
      at com.firebase.client.core.view.DataEvent.fire(DataEvent.java:45) 
      at com.firebase.client.core.view.EventRaiser$1.run(EventRaiser.java:38) 
      at android.os.Handler.handleCallback(Handler.java:800) 
      at android.os.Handler.dispatchMessage(Handler.java:100) 
      at android.os.Looper.loop(Looper.java:194) 
      at android.app.ActivityThread.main(ActivityThread.java:5371) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:525) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: com.shaded.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token 
      at [Source: [email protected]; line: 1, column: 1] 
      at com.shaded.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:575) 
      at com.shaded.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:569) 
      at com.shaded.fasterxml.jackson.databind.deser.std.StringCollectionDeserializer.handleNonArray(StringCollectionDeserializer.java:218) 
      at com.shaded.fasterxml.jackson.databind.deser.std.StringCollectionDeserializer.deserialize(StringCollectionDeserializer.java:166) 
      at com.shaded.fasterxml.jackson.databind.deser.std.StringCollectionDeserializer.deserialize(StringCollectionDeserializer.java:156) 
      at com.shaded.fasterxml.jackson.databind.deser.std.StringCollectionDeserializer.deserialize(StringCollectionDeserializer.java:19) 
      at com.shaded.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2888) 
      at com.shaded.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2041) 
      at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:206) 
            at com.kate.teme.AdminContent$2.onDataChange(AdminContent.java:105) 
            at com.firebase.client.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:45) 
            at com.firebase.client.core.view.DataEvent.fire(DataEvent.java:45) 
            at com.firebase.client.core.view.EventRaiser$1.run(EventRaiser.java:38) 
            at android.os.Handler.handleCallback(Handler.java:800) 
            at android.os.Handler.dispatchMessage(Handler.java:100) 
            at android.os.Looper.loop(Looper.java:194) 
            at android.app.ActivityThread.main(ActivityThread.java:5371) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:525) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
            at dalvik.system.NativeStart.main(Native Method) 
+0

budaa huwezi оценить MSEE akupa решение angalau ka-checkmark –

ответ

6

Посмотрите на вашу информацию:

"Driver name" : { 
    "-Js6OJniEqVZAYSNhqbB" : "gvvb", 
    "-Js7GjPMGNOLurrKk9rC" : "iggvv", 
    "-Js7GlUlCwIoljJxpFbZ" : "iiggv", 
    "-Js7GnBCRogiFUfn-ncZ" : "ihccvv", 
    "-Js7GqGxH2vLYK5tsjjP" : "hhvv", 
    "-Js7Gs80AoB5eeWci6jW" : "hhgc", 
    "-Js7Gtm6AGh_QaTUK6fQ" : "ugghh", 
    "-Js7GyomOIzjtVo3-PVg" : "tyygff", 
    "-JsPxEhf4tx7O4v7JWMc" : "", 
    "-JsQBoMqVBF4SzOHF3WA" : "rr", 
    "-JsQC6TuGqHrBBkdalik" : "eed" 
} 

Вы пытаетесь десериализовать это в List<String>. Но на самом деле это Map<String,String>. Итак:

@Override 
public void onDataChange(DataSnapshot snapshot) { 
    GenericTypeIndicator<Map<String,String>> mapType = new GenericTypeIndicator<Map<String, String>>() { }; 
    Map<String,String> namelist = snapshot.child("Driver name").getValue(mapType); 
    Map<String,String> carlist = snapshot.child("Drivers car").getValue(mapType); 
    if (namelist!=null & carlist!=null) { 
     for (String name: namelist.values()) { 
      System.out.println(name); 
     } 
    } 
} 

Обратите внимание, что я понятия не имею, как вы пытаетесь совместить водителя и их автомобиль. Я настоятельно рекомендую вам пересмотреть эту структуру данных до, которую вы продолжаете кодировать.

Одна из возможных структур:

"DriversList": { 
    "-Js6OJniEqVZAYSNhqbB" : { 
    "name": "puf", 
    "available": false, 
    "car": "Toyota RAV4" 
    }, 
    "-Js7GjPMGNOLurrKk9rC" : { 
    "name": "manon", 
    "available": false, 
    "car": "Toyota Matrix" 
    }, 
    ... 
} 

Для чтения/записи это, вы будете нуждаться в Driver класс:

public class Driver { 
    String name; 
    Boolean available; 
    String car; 

    public Driver() {} 

    public String getName() { return name; } 
    public Boolean getAvailable() { return available; } 
    public String getCar() { return car; } 
} 

И потом:

public void onDataChange(DataSnapshot snapshot) { 
    GenericTypeIndicator<Map<String,Driver>> mapType = new GenericTypeIndicator<Map<String, Driver>>() { }; 
    Map<String,Driver> drivers = snapshot.getValue(mapType); 
    if (drivers!=null) { 
     for (Driver driver: drivers.values()) { 
      System.out.println(driver.name); 
     } 
    } 
} 
+0

и как я десериализую это –

+0

Я добавил образец этого. Потратьте время, чтобы изучить эту страницу https://www.firebase.com/docs/android/guide/saving-data.html, которую мы недавно обновили, чтобы быть лучшим руководством по работе с структурами данных, такими как эта , –

+0

спасибо большое, что у меня уже был класс водителя ... но ive получил все отсортировано –

Смежные вопросы