2016-01-01 15 views
2
**I am trying to populate the firebase data via FirebaseRecyclerAdapter but i get errors in log, 
01-01 22:42:32.610 25547-25547/exam.vsrk.cleanvit I/System.out﹕ Description: add 
01-01 22:42:32.610 25547-25547/exam.vsrk.cleanvit I/System.out﹕ Status: clean 
01-01 22:42:32.610 25547-25547/exam.vsrk.cleanvit I/System.out﹕ Description: ghffjggu 
01-01 22:42:32.610 25547-25547/exam.vsrk.cleanvit I/System.out﹕ Status: dirty 
01-01 22:42:32.610 25547-25547/exam.vsrk.cleanvit I/System.out﹕ Description: fhfhjhg 
01-01 22:42:32.610 25547-25547/exam.vsrk.cleanvit I/System.out﹕ Status: dirty 
01-01 22:42:32.610 25547-25547/exam.vsrk.cleanvit I/System.out﹕ Description: fg 
01-01 22:42:32.610 25547-25547/exam.vsrk.cleanvit I/System.out﹕ Status: dirty 
01-01 22:42:32.610 25547-25547/exam.vsrk.cleanvit I/System.out﹕ Description: ggg 
01-01 22:42:32.610 25547-25547/exam.vsrk.cleanvit I/System.out﹕ Status: dirty 
01-01 22:42:32.610 25547-25547/exam.vsrk.cleanvit I/System.out﹕ Description: add 
01-01 22:42:32.611 25547-25547/exam.vsrk.cleanvit I/System.out﹕ Status: dirty 
01-01 22:42:32.611 25547-25547/exam.vsrk.cleanvit I/System.out﹕ Description: .ark this 
01-01 22:42:32.611 25547-25547/exam.vsrk.cleanvit I/System.out﹕ Status: dirty 
01-01 22:42:32.611 25547-25547/exam.vsrk.cleanvit I/System.out﹕ Description: mark 
01-01 22:42:32.611 25547-25547/exam.vsrk.cleanvit I/System.out﹕ Status: dirty 
01-01 22:42:32.648 25547-25547/exam.vsrk.cleanvit D/AndroidRuntime﹕ Shutting down VM 
01-01 22:42:32.650 25547-25547/exam.vsrk.cleanvit E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: exam.vsrk.cleanvit, PID: 25547 
    com.firebase.client.FirebaseException: Failed to bounce to type 
      at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:185) 
      at com.firebase.ui.FirebaseRecyclerAdapter.getItem(FirebaseRecyclerAdapter.java:150) 
      at com.firebase.ui.FirebaseRecyclerAdapter.onBindViewHolder(FirebaseRecyclerAdapter.java:179) 
      at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:5217) 
      at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5250) 
      at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4487) 
      at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4363) 
      at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1961) 
      at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1370) 
      at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1333) 
      at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:562) 
      at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2900) 
      at android.support.v7.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1445) 
      at android.support.v7.widget.RecyclerView.access$400(RecyclerView.java:144) 
      at android.support.v7.widget.RecyclerView$1.run(RecyclerView.java:282) 
      at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) 
      at android.view.Choreographer.doCallbacks(Choreographer.java:580) 
      at android.view.Choreographer.doFrame(Choreographer.java:549) 
      at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) 
      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:5343) 
      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:905) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) 
    Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "-880497298" (class exam.vsrk.cleanvit.MapComponents.Maps.FireBaseUI.RemovedSpotItems), not marked as ignorable (4 known properties: , "status", "owner", "description", "cleanedBy"]) 
      at [Source: [email protected]; line: 1, column: 16] (through reference chain: exam.vsrk.cleanvit.MapComponents.Maps.FireBaseUI.RemovedSpotItems["-880497298"]) 
      at com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty(DeserializationContext.java:555) 
      at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:708) 
      at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1160) 
      at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:315) 
      at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:121) 
      at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2888) 
      at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2034) 
      at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:183) 
            at com.firebase.ui.FirebaseRecyclerAdapter.getItem(FirebaseRecyclerAdapter.java:150) 
            at com.firebase.ui.FirebaseRecyclerAdapter.onBindViewHolder(FirebaseRecyclerAdapter.java:179) 
            at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:5217) 
            at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5250) 
            at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4487) 
            at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4363) 
            at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1961) 
            at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1370) 
            at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1333) 
            at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:562) 
            at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2900) 
            at android.support.v7.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1445) 
            at android.support.v7.widget.RecyclerView.access$400(RecyclerView.java:144) 
            at android.support.v7.widget.RecyclerView$1.run(RecyclerView.java:282) 
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) 
            at android.view.Choreographer.doCallbacks(Choreographer.java:580) 
            at android.view.Choreographer.doFrame(Choreographer.java:549) 
            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) 
            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:5343) 
            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:905) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) 

Вот мой полный код.FireBase UI Android FirebaseRecyclerAdapter error

public class RemovedSpotsActivity extends AppCompatActivity { 

    private FirebaseRecyclerAdapter mAdapter; 
    List<RemovedSpotItems> removedSpots; 


    @Override 
    protected void onCreate(Bundle s) { 

    super.onCreate(s); 
    setContentView(R.layout.removed_spots_list); 

    removedSpots=new ArrayList<>(); 

    Firebase.setAndroidContext(this); 
    final Firebase ref = new Firebase(getResources().getString(R.string.firebase_url)); 
    RecyclerView recycler = (RecyclerView) findViewById(R.id.recycler_view); 
    recycler.setHasFixedSize(true); 
    recycler.setLayoutManager(new LinearLayoutManager(this)); 
    String key=ref.child("markers").getKey(); 
    Log.v("KEY_ENTERED",key); 
    ref.child("markers").addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
      Map<String, Object> newPost = (Map<String, Object>) dataSnapshot.getValue(); 
      System.out.println("Description: " + newPost.get("description")); 
      System.out.println("Status: " + newPost.get("status")); 
      RemovedSpotItems items = new RemovedSpotItems(); 

      items.setDescription((String) newPost.get("description")); 
      items.setStatus((String) newPost.get("status")); 
      removedSpots.add(items); 
     } 
     public void onChildChanged(DataSnapshot dataSnapshot, String s) { } 
     public void onChildRemoved(DataSnapshot dataSnapshot) { } 
     public void onChildMoved(DataSnapshot dataSnapshot, String s) { } 
     public void onCancelled(FirebaseError firebaseError) { } 
    }); 

    mAdapter = new FirebaseRecyclerAdapter<RemovedSpotItems, ReomvedSpotViewHolder>(RemovedSpotItems.class, R.layout.removed_spots_row, ReomvedSpotViewHolder.class,ref) { 

     @Override 
     protected void populateViewHolder(ReomvedSpotViewHolder viewHolder, RemovedSpotItems model, int position) { 
      super.populateViewHolder(viewHolder, model, position); 
      final int i = 0; 
      Log.v("TAG","populating"); 
      RemovedSpotItems model1=removedSpots.get(i); 

      viewHolder.description.setText(model1.getDescription()); 
      viewHolder.email.setText(model1.getStatus()); 
     } 
    }; 

    recycler.setAdapter(mAdapter); 
} 

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

RemovedSpotItems.java

public class RemovedSpotItems { 
    public String description; 
    public String cleanedBy; 
    public String owner; 
    public String status; 

    public String getDescription() 
    { 
     return description; 
    } 
    public void setDescription(String description) 
    { 
     this.description=description;   
    } 
    public String getCleanedBy() 
    { 
     return cleanedBy; 
    } 
    public void setCleanedBy(String cleanedBy) 
    { 
     this.cleanedBy=cleanedBy; 
    } 
    public String getStatus() 
    { 
     return status; 
    } 
    public void setStatus(String status) 
    { 
     this.status=status; 
    } 
    public String getOwner() { return owner;} 
    public void setOwner(String owner) 
    { 
     this.owner=owner; 
    } 

} 

JSON СТРУКТУРА говорит сообщение

{ 
    "markers" : { 
    "-341910319" : { 
     "description" : "fhfhfhh", 
     "latitude" : 26.207505661864655, 
     "longitude" : 78.17407708615065, 
     "owner" : "6b63df86-9d11-47f5-bac1-7150f9043016", 
     "status" : "dirty" 
    }, 
    "-101000882" : { 
     "description" : "fifs", 
     "latitude" : 26.207906640793592, 
     "longitude" : 78.17450053989887, 
     "owner" : "6b63df86-9d11-47f5-bac1-7150f9043016", 
     "status" : "dirty" 
    } 
    }, 
    "users" : { 
    "6b63df86-9d11-47f5-bac1-7150f9043016" : { 
     "displayName" : "[email protected]", 
     "provider" : "password" 
    } 
    } 
} 
+0

Не видя образца вашего JSON (как текст, скриншоты JSON довольно бесполезны), невозможно сказать, что вызывает это. Нам также нужно увидеть 'RemovedSpotItems', так как это то, к чему вы пытаетесь сопоставить JSON. См. Http://stackoverflow.com/help/mcve, как сделать это проще всего для нас, чтобы помочь вам. –

+0

Я добавил их, пожалуйста, проверьте сейчас .. –

ответ

0

Ошибка:

Непризнанный поле "-880497298" (класс exam.vsrk.cleanvit.MapComponents. Maps.FireBaseUI.RemovedSpotItems), не отмеченные как невежественные (4 известных свойства:, «статус», «владелец», «описание», «cleanedBy»])

При разборе JSON из Firebase в класс Java, Джексон нашел четыре свойства в классе: status, owner, description и cleanedBy. Но в JSON он нашел поле под названием -880497298, которое не знает, что с ним делать.

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

final Firebase ref = new Firebase(getResources().getString(R.string.firebase_url)); 
... 
String key=ref.child("markers").getKey(); 
... 
mAdapter = new FirebaseRecyclerAdapter<RemovedSpotItems, ReomvedSpotViewHolder>(
    RemovedSpotItems.class, 
    R.layout.removed_spots_row, 
    ReomvedSpotViewHolder.class, 
    ref) { 

Так что, скорее всего, вам необходимо пройти в ref.child("markers") в качестве последнего аргумента при построении адаптера.

После исправления вы все равно получите JSON-to-Java ошибку, потому что ваш JSON не соответствует вашему классу. Я рекомендую изучать этот вопрос и ответ, чтобы решить, что: Why do I get "Failed to bounce to type" when I turn JSON from Firebase into Java objects?

0

EDIT

Ваш класс RemovedSpotItems нужен конструктор по умолчанию

есть по умолчанию (конструктор без параметров), который необходим для Firebase в быть в состоянии создать новый экземпляр этого класса

public RemovedSpotItems() {} 

Оригинала с редактированием добавило

Если вы хотите использовать класс RemovedSpotItems без необходимости всех свойств в вашем объекте JSON вы можете использовать это:

import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 
... 


@JsonIgnoreProperties(ignoreUnknown=true) 
public class RemovedSpotItems { 
    ... 
    //edit 
    public RemovedSpotItems() {} 
    ... 
} 

Просто убедитесь, что вы обработкой тех вы используете правильно.

Возможные типы возвращаемых getValue() являются Boolean, String, Long, Double, Map<String, Object> и List<Object>. Если данных нет в , то моментальный снимок вернет null.

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

  • Нет связанных вопросов^_^