我需要从FirebaseDatabse

时间:2018-04-14 06:23:42

标签: java android firebase firebase-realtime-database

我需要从firebase数据库中检索数据,但在执行时我遇到了一些我在下面发布的错误以及我正在使用的代码。请仔细阅读并告知我我做错的地方。

先谢谢。

这是我的 MainActivity.java

public class MainActivity extends AppCompatActivity 
{
private FirebaseDatabase mFirebaseDatabase;
private DatabaseReference mDatabaseReference;
private ChildEventListener mChildEventListener;
private ListView mListView;
private CustomAdapter mAdapterClass;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mListView=(ListView)findViewById(R.id.mainListView);
    List<AdapterClass> list=new ArrayList<>();
    mAdapterClass=new CustomAdapter(this,R.layout.item_list,list);
    mListView.setAdapter(mAdapterClass);


    mFirebaseDatabase=FirebaseDatabase.getInstance();
    mDatabaseReference=mFirebaseDatabase.getReference().child("messages");


    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent=new Intent(MainActivity.this,CreatePost.class);
            startActivity(intent);
        }
    });


    mChildEventListener=new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            AdapterClass data = dataSnapshot.getValue(AdapterClass.class);
            mAdapterClass.add(data);

        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    };
    mDatabaseReference.addChildEventListener(mChildEventListener);


}

}

这是我的 CustomAdapter.java

public class CustomAdapter extends ArrayAdapter<AdapterClass> {
public CustomAdapter(@NonNull Context context, int resource, @NonNull List<AdapterClass> objects) {
    super(context, resource, objects);
}

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    View currentView=convertView;
    if(currentView==null)
    {
        currentView= LayoutInflater.from(getContext()).inflate(R.layout.item_list,parent,false);
    }
    AdapterClass adapter=getItem(position);
    TextView txt=(TextView)currentView.findViewById(R.id.listItemTextView);
    txt.setText(adapter.getMessage());
    return currentView;
}
}

这是我的 AdapterClass.java

public class AdapterClass {

private String mMessage;

public AdapterClass()
{
}
public AdapterClass(String message)
{
    this.mMessage=message;
}
public String getMessage()
{
    return mMessage;
}
public void setMessage(String message)
{
    mMessage=message;
}

}

我得到的错误是

 FATAL EXCEPTION: main
              Process: com.example.android.vvietproject, PID: 22972
              com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.example.android.vvietproject.AdapterClasses.AdapterClass
                  at com.google.android.gms.internal.zzepg.zzb(Unknown Source)
                  at com.google.android.gms.internal.zzepg.zza(Unknown Source)
                  at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)
                  at com.example.android.vvietproject.MainActivity$2.onChildAdded(MainActivity.java:61)
                  at com.google.android.gms.internal.zzegg.zza(Unknown Source)
                  at com.google.android.gms.internal.zzelk.zzcal(Unknown Source)
                  at com.google.android.gms.internal.zzelq.run(Unknown Source)
                  at android.os.Handler.handleCallback(Handler.java:751)
                  at android.os.Handler.dispatchMessage(Handler.java:95)
                  at android.os.Looper.loop(Looper.java:154)
                  at android.app.ActivityThread.main(ActivityThread.java:6816)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1565)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1453)

申请已终止。

1 个答案:

答案 0 :(得分:0)

问题在于这一行:

 AdapterClass data = dataSnapshot.getValue(AdapterClass.class);

您无法将其firebase数据转换为pojo。

你可以做的一件事是:

public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        String message = (String)dataSnapshot.child("message").getValue();
        AdapterClass data = new Adapter(message);
        mAdapterClass.add(data);

    }