Android 从Firebase检索日期
我正在尝试创建一条时间线来表示CardView中添加的所有公告 我遵循本教程中的每一项内容 但是,当我试图从firebase检索数据时,出现了一个异常抛出,现在无法解释为什么以及如何处理它: 我的持有人:Android 从Firebase检索日期,android,firebase,firebase-realtime-database,android-recyclerview,Android,Firebase,Firebase Realtime Database,Android Recyclerview,我正在尝试创建一条时间线来表示CardView中添加的所有公告 我遵循本教程中的每一项内容 但是,当我试图从firebase检索数据时,出现了一个异常抛出,现在无法解释为什么以及如何处理它: 我的持有人: package com.volunteer.android.HolderClasses; import android.support.v7.widget.CardView; import android.support.v7.widget.RecyclerView; import and
package com.volunteer.android.HolderClasses;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.volunteer.android.R;
public class AnnouncementHolder extends RecyclerView.ViewHolder {
public TextView orgtname ;
public TextView Evenname;
public CardView HomeCard ;
public TextView Start;
public TextView City;
public TextView Field;
public TextView moreinfo;
public TextView contactInfo;
public ImageView pic ;
public ImageView report ;
FirebaseAuth mAuth ;
DatabaseReference reportRef ;
public AnnouncementHolder(View view){
super(view);
mAuth=FirebaseAuth.getInstance();
reportRef= FirebaseDatabase.getInstance().getReference().child("Reports");
reportRef.keepSynced(true);
HomeCard=(CardView)view.findViewById(R.id.CardviewHome);
orgtname = (TextView) view.findViewById(R.id.textViewOragName);
Evenname = (TextView) view.findViewById(R.id.textViewEventName);
Start = (TextView) view.findViewById(R.id.TextViewDate);
City = (TextView) view.findViewById(R.id.TextViewCity);
Field = (TextView) view.findViewById(R.id.TextViewField);
moreinfo = (TextView) view.findViewById(R.id.TextViewPost);
contactInfo = (TextView) view.findViewById(R.id.contact);
pic =(ImageView)view.findViewById(R.id.ImagproSe);
report=(ImageView)view.findViewById(R.id.report_btn);
}
public void setPost_key(final String postKey){
reportRef.addValueEventListener(new com.google.firebase.database.ValueEventListener() {
@Override
public void onDataChange(com.google.firebase.database.DataSnapshot dataSnapshot) {
if(dataSnapshot.child(postKey).hasChild(mAuth.getCurrentUser().getUid())){
report.setImageResource(R.drawable.ic_link);
}
else {
report.setImageResource(R.mipmap.ic_report_black_24dp);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
MyAdapter:
[package com.volunteer.android.adapter;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import com.firebase.client.Firebase;
import com.firebase.client.FirebaseError;
import com.google.firebase.auth.FirebaseAuth;
import com.volunteer.android.HolderClasses.AnnouncementHolder;
import com.volunteer.android.R;
import com.volunteer.android.data.Announcement;
import com.volunteer.android.data.Constants;
import java.util.ArrayList;
/**
* Created by macbookpro on 8/20/16 AD.
*/
public class AnnouncementAdapter extends RecyclerView.Adapter<AnnouncementHolder> {
Context c;
ArrayList<Announcement> Announcements = new ArrayList<>();
String Uid;
Firebase announcRef ;
Firebase reportRef ;
FirebaseAuth mAuth ;
// final String AnnKey ;
private boolean mProccesLike=false ;
public AnnouncementAdapter(Context c, ArrayList<Announcement> Announcements , String Uid){
this.c=c;
this.Announcements=Announcements;
this.Uid=Uid;
// expRef=new Firebase(Constants.USER_ECPERIENCE_PATH);
mAuth=FirebaseAuth.getInstance();
reportRef=new Firebase(Constants.FIREBASE_URL+"/Reports");
}
@Override
public void onBindViewHolder(AnnouncementHolder holder, int position) {
final Announcement announcement = Announcements.get(position);
holder.orgtname.setText((Announcements.get(position)).getOrgName());
holder.Evenname.setText((Announcements.get(position)).getEventName());
holder.contactInfo.setText((Announcements.get(position)).getContact());
holder.Field.setText((Announcements.get(position)).getField());
holder.Start.setText((Announcements.get(position)).getStartDate());
holder.moreinfo.setText((Announcements.get(position)).getMoreInfo());
holder.City.setText((Announcements.get(position)).getCity());
// holder.setPost_key(announcement.getAnnId());
holder.report.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mProccesLike=true ;
reportRef.addValueEventListener(new com.firebase.client.ValueEventListener() {
@Override
public void onDataChange(com.firebase.client.DataSnapshot dataSnapshot) {
if (mProccesLike){
if (dataSnapshot.child(announcement.getAnnId()).hasChild(mAuth.getCurrentUser().getUid())){
reportRef.child(announcement.getAnnId()).child(mAuth.getCurrentUser().getUid()).removeValue();
mProccesLike=false ;
}else {
reportRef.child(announcement.getAnnId()).child(mAuth.getCurrentUser().getUid()).setValue("True");
mProccesLike=false ;
}
}}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
}
});
}
public void animate(RecyclerView.ViewHolder viewHolder) {
final Animation animAnticipateOvershoot = AnimationUtils.loadAnimation(c, R.anim.anticipateovershoot_interpolator);
viewHolder.itemView.setAnimation(animAnticipateOvershoot);
}
@Override
public AnnouncementHolder onCreateViewHolder (ViewGroup parent, int viewType){
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view_home, parent, false);
AnnouncementHolder holder =new AnnouncementHolder(v);
return holder;
}
@Override
public int getItemCount() {
return Announcements.size(); //mAssignments.size();
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
// Insert a new item to the RecyclerView on a predefined position
public void insert(Announcement announcement, int position) {
Announcements.add(position, announcement);
notifyItemInserted(position);
}
// Remove a RecyclerView item containing a specified Data object
public void remove(Announcement announcement) {
int position = Announcements.indexOf(announcement);
Announcements.remove(position);
notifyItemRemoved(position);
}
}][1]
请发布您的公告。class文件完成,您认为问题出在哪里?看起来您正在混合Firebase版本。在您的类中,有些firebase引用使用“com.firebase.client.[class]”,有些使用“com.google.firebase.[class]”……我不确定您打算使用哪个版本的firebase,但选择一个并更正引用,然后重新运行我按照您的建议执行,但问题仍然存在!您对“更正您的参考资料,然后重新运行”有何建议?因为我肯定问题出在他们身上!我不知道如何处理演员快照,我分享了我的firebase完整等级。这不是Twitter。Hashtags在标题中没有任何作用。请发布您的公告。class fileDone,您认为问题出在哪里?看起来您正在混合Firebase版本。在您的类中,有些firebase引用使用“com.firebase.client.[class]”,有些使用“com.google.firebase.[class]”……我不确定您打算使用哪个版本的firebase,但选择一个并更正引用,然后重新运行我按照您的建议执行,但问题仍然存在!您对“更正您的参考资料,然后重新运行”有何建议?因为我肯定问题出在他们身上!我不知道如何处理演员快照,我分享了我的firebase完整等级。这不是Twitter。标签在标题中没有任何作用
public void saveAnnouncement (View view){
org=editTextOrg.getText().toString().trim();
if (org.length()>300){
return;
}
Event=editTextEvent.getText().toString().trim();
if (Event.length()>300){
return;
}
sDate=editTextSd.getText().toString().trim();
if (sDate.length()>300){
return;}
info=editTextInfo.getText().toString().trim();
if (info.length()>300){
return;
}
contact=editTextContat.getText().toString().trim();
if (contact.length()>300){
return;
}
if (cityName==null){
return;
}
if (Feild==null){
return;
}
sDate=editTextSd.getText().toString().trim();
Announcement announcement = new Announcement(Uid,"" ,org, Event, sDate, cityName,Feild , info , contact );
//Map<String, Object> map = new HashMap<>();
// map.put("announcement",announcement);
mRef.child("Announcement").push().setValue(announcement);
package com.volunteer.android.Fragment;
/**
* Created by macbookpro on 8/23/16 AD.
*/
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import com.firebase.client.ChildEventListener;
import com.firebase.client.DataSnapshot;
import com.firebase.client.Firebase;
import com.firebase.client.FirebaseError;
import com.google.firebase.auth.FirebaseAuth;
import com.volunteer.android.R;
import com.volunteer.android.adapter.AnnouncementAdapter;
import com.volunteer.android.data.Announcement;
import com.volunteer.android.data.Constants;
import java.util.ArrayList;
/**
* Created by jnoo1 on 8/11/2016.
*/
public class Home extends Fragment {
RecyclerView rv ;
ArrayList<Announcement> announcements = new ArrayList<>();
AnnouncementAdapter adapter ;
Firebase myRef ;
FloatingActionButton AddAnouncement ;
FirebaseAuth mAuth ;
String Uid ;
public Home(){}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view =inflater.inflate(R.layout.fragment_etailse,container,false);
Firebase.setAndroidContext(getActivity());
myRef = new Firebase(Constants.FIREBASE_URL);
rv =(RecyclerView)view.findViewById(R.id.recyclerViewHome);
rv.setLayoutManager(new LinearLayoutManager(getActivity()));
AddAnouncement=(FloatingActionButton) view.findViewById(R.id.fab1);
mAuth=FirebaseAuth.getInstance();
Uid=mAuth.getCurrentUser().getUid();
adapter=new AnnouncementAdapter(getActivity(),announcements,Uid);
rv.setAdapter(adapter);
RefreshData();
return view ;
}
public void RefreshData (){
myRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
getUpdates(dataSnapshot);}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
getUpdates(dataSnapshot);}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
getUpdates(dataSnapshot);}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {}
@Override
public void onCancelled(FirebaseError firebaseError) {}
}); }
private void getUpdates (DataSnapshot dataSnapshot ){
announcements.clear();
for (DataSnapshot Ds : dataSnapshot.getChildren())
{
Announcement announcement=new Announcement();
announcement.setOrgName( Ds.getValue(Announcement.class).getOrgName());
announcement.setEventName(Ds.getValue(Announcement.class).getEventName());
announcement.setCity(Ds.getValue(Announcement.class).getCity());
announcement.setField(Ds.getValue(Announcement.class).getField());
announcement.setStartDate(Ds.getValue(Announcement.class).getStartDate());
announcement.setMoreInfo(Ds.getValue(Announcement.class).getMoreInfo());
announcement.setContact(Ds.getValue(Announcement.class).getContact());
// announcement.setAnnId((String) Ds.getKey());
//exp.setCity((String) dataSnapshot.child("city").getValue());
announcements.add(announcement);
}
if (announcements.size()>0){
adapter=new AnnouncementAdapter(getActivity(),announcements,Uid);
rv.setAdapter(adapter); }
else {
Toast.makeText(getActivity() ," No thing to show ", Toast.LENGTH_SHORT).show(); } }
}
09-15 17:11:35.622 5862-5884/com.volunteer.android I/DynamiteModule: Considering local module com.google.android.gms.tagmanager:3 and remote module com.google.android.gms.tagmanager:3
09-15 17:11:35.622 5862-5884/com.volunteer.android I/DynamiteModule: Selected local version of com.google.android.gms.tagmanager
09-15 17:11:35.648 5862-5884/com.volunteer.android W/GoogleTagManager: Tag Manager's event handler WILL NOT be installed (no container loaded)
09-15 17:11:35.648 5862-5884/com.volunteer.android I/GoogleTagManager: Tag Manager initilization took 23ms
09-15 17:11:35.819 5862-5862/com.volunteer.android D/FirebaseCrashApiImpl: throwable com.firebase.client.FirebaseException: Failed to bounce to type
09-15 17:11:35.849 5862-5862/com.volunteer.android E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.volunteer.android, PID: 5862
com.firebase.client.FirebaseException: Failed to bounce to type
at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:183)
at com.volunteer.android.Fragment.Home.getUpdates(Home.java:107)
at com.volunteer.android.Fragment.Home.access$000(Home.java:32)
at com.volunteer.android.Fragment.Home$1.onChildAdded(Home.java:85)
at com.firebase.client.core.ChildEventRegistration.fireEvent(ChildEventRegistration.java:48)
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:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
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:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "UserInformation" (class com.volunteer.android.data.Announcement), not marked as ignorable (11 known properties: , "contact", "moreInfo", "eventName", "city", "orgName", "startDate", "uid", "field", "annId", "picture", "key"])
at [Source: java.io.StringReader@1a04a2ef; line: 1, column: 21] (through reference chain: com.volunteer.android.data.Announcement["UserInformation"])
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:181)
at com.volunteer.android.Fragment.Home.getUpdates(Home.java:107)
at com.volunteer.android.Fragment.Home.access$000(Home.java:32)
at com.volunteer.android.Fragment.Home$1.onChildAdded(Home.java:85)
at com.firebase.client.core.ChildEventRegistration.fireEvent(ChildEventRegistration.java:48)
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:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
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:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
09-15 17:11:36.234 5993-5993/com.volunteer.android:background_crash W/DynamiteModule: Local module descriptor class for com.google.android.gms.crash not found.
package com.volunteer.android.data;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.google.firebase.database.Exclude;
/**
* Created by macbookpro on 8/10/16 AD.
*/
public class Announcement {
@JsonIgnore
private String Key ;
private String OrgName;
private String EventName;
private String StartDate;
private String City;
private String Field;
private String MoreInfo;
private String Contact;
private String Picture;
private String Uid;
private String AnnId ;
public Announcement (){
// defualt ;
}
public Announcement (String Uid, String AnnId ,String OrgName,String EventName,String StartDate,String City,String Field, String MoreInfo, String Contact){
this.Uid=Uid;
this.AnnId=AnnId;
this.OrgName=OrgName;
this.EventName=EventName;
this.StartDate=StartDate;
this.City=City;
this.Field=Field;
this.MoreInfo=MoreInfo;
this.Contact=Contact;
}
public void setAnnId (String AnnId){this.AnnId=AnnId;}
public String getAnnId (){return AnnId;}
public void setKey(String Key){
Key=Key;
}
@Exclude
public String getKey(){
return Key;
}
public void setUid (String Uid){this.Uid=Uid;}
public String getUid (){return Uid ; }
public void setOrgName(String orgName){
OrgName=orgName;
}
public String getOrgName(){
return OrgName;
}
public void setEventName(String EName){
EventName=EName;
}
public String getEventName(){
return EventName;
}
public void setStartDate(String Date){
StartDate= Date;
}
public String getStartDate(){
return StartDate;
}
public void setCity(String c){
City=c;
}
public String getCity(){
return City;
}
public void setField(String f){
Field=f;
}
public String getField(){
return Field;
}
public void setMoreInfo(String m){
MoreInfo=m;
}
public String getMoreInfo(){
return MoreInfo;
}
public void setContact(String Contact){
this.Contact=Contact;
}
public String getContact(){
return Contact;
}
public void setPicture(String p){
Picture=p;
}
public String getPicture(){
return Picture;
}
}