2016-12-01 35 views
0

的消息我已经遇到了困难让我的Android应用程序的RecyclerView已经填充FirebaseUI适配器,数据在火力地堡数据库,虽然我可以通过发送数据给它:困难得到实时RecyclerView FirebaseUI安卓显示从数据库

public void onAdd(View v){ 
    //create Firebase Object 
    t=(EditText) findViewById(R.id.display); 
    String mitems=t.getText().toString(); 
    myRef.push().setValue(mitems.toString()); 
} 

我用我的接收发送的数据的目的下面的,但它是不工作:

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

    //Recycler 
    recyclerView=(RecyclerView)findViewById(R.id.messageRecyclerView); 
    recyclerView.setHasFixedSize(true); 
    recyclerView.setLayoutManager(new LinearLayoutManager(this)); 

    //Adapter 
    FirebaseRecyclerAdapter<String, MessageViewHolder> mFirebaseAdapter= 
     new FirebaseRecyclerAdapter<String, MessageViewHolder>(
       String.class, 
       android.R.layout.simple_list_item_1, 
       MessageViewHolder.class, 
       myRef.child("Message") 
       ) { 
        @Override 
        protected void populateViewHolder(MessageViewHolder viewHolder, String model, int position) { 
         viewHolder.messageTextView.setText(model.toString()); 
       } 
      }; 
    recyclerView.setAdapter(mFirebaseAdapter); 
} 

我ViewHolder被这样定义:

static class MessageViewHolder extends RecyclerView.ViewHolder { 
    public TextView messageTextView; 

    MessageViewHolder(View view) { 
     super(view); 
     messageTextView = (TextView)view.findViewById(android.R.id.text1); 
    } 
} 

XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/messageRecyclerView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 

     /> 
    <EditText 
     android:hint="Enter Text" 
     android:id="@+id/display" 
     android:textColor="@color/colorAccent" 
     android:background="@color/colorPrimary" 
     android:padding="10dp" 
     android:layout_width="match_parent" android:layout_height="wrap_content"/> 
    <Button android:layout_height="wrap_content" 
     android:layout_width="match_parent" 
     android:text="ADD ITEM" 
     android:onClick="onAdd" 
     /> 

</LinearLayout> 

以下是错误消息:

Exception java.lang.ClassCastException: android.support.v7.widget.AppCompatTextView cannot be cast to android.view.ViewGroup 
com.firebase.ui.database.FirebaseRecyclerAdapter.onCreateViewHolder (FirebaseRecyclerAdapter.java:160) 
android.support.v7.widget.RecyclerView$Adapter.createViewHolder (RecyclerView.java:6073) 
android.support.v7.widget.RecyclerView$Recycler.getViewForPosition (RecyclerView.java:5243) 
android.support.v7.widget.RecyclerView$Recycler.getViewForPosition (RecyclerView.java:5153) 
android.support.v7.widget.LinearLayoutManager$LayoutState.next (LinearLayoutManager.java:2061) 
android.support.v7.widget.LinearLayoutManager.layoutChunk (LinearLayoutManager.java:1445) 
android.support.v7.widget.LinearLayoutManager.fill (LinearLayoutManager.java:1408) 
android.support.v7.widget.LinearLayoutManager.onLayoutChildren (LinearLayoutManager.java:580) 
android.support.v7.widget.RecyclerView.dispatchLayoutStep2 (RecyclerView.java:3374) 
android.support.v7.widget.RecyclerView.dispatchLayout (RecyclerView.java:3183) 
android.support.v7.widget.RecyclerView.consumePendingUpdateOperations (RecyclerView.java:1593) 
android.support.v7.widget.RecyclerView$1.run (RecyclerView.java:323) 
android.view.Choreographer$CallbackRecord.run (Choreographer.java:788) 
android.view.Choreographer.doCallbacks (Choreographer.java:591) 
android.view.Choreographer.doFrame (Choreographer.java:559) 
android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:774) 
android.os.Handler.handleCallback (Handler.java:808) 
android.os.Handler.dispatchMessage (Handler.java:103) 
android.os.Looper.loop (Looper.java:193) 
android.app.ActivityThread.main (ActivityThread.java:5299) 
java.lang.reflect.Method.invokeNative (Method.java) 
java.lang.reflect.Method.invoke (Method.java:515) 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:829) 
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:645) 
dalvik.system.NativeStart.main (NativeStart.java) 

回答

0

我在解决这一问题的首次尝试是在集中精力,我怀疑没有work.From错误消息夹头,

Exception 
java.lang.ClassCastException:android.support.v7.widget.AppCompatTextView 
cannot be cast to android.view.ViewGroup 

我最好的猜测是RecyclerView及其coressponding FirebaseRecyclerAdapter.I取代它带有一个ListView及其相应的FirebaseListAdapter,因此:

ListView ml=(ListView) findViewById(R.id.listview); 

    FirebaseListAdapter<String> adapter=new FirebaseListAdapter<String>(this,String.class,android.R.layout.simple_list_item_1,myRef.child("Message")) 
    { 
     @Override 
     protected void populateView(View v, String model, int position) { 
      TextView tv=(TextView) v.findViewById(android.R.id.text1) ; 
      tv.setText(model); 

     } 
    }; 
    ml.setAdapter(adapter) ; 

ListView工作;从而确认Firebase数据库格式良好。我开始使用RecyclerView重新开发应用程序,并且我意识到第一个问题(即使在成功清理项目后),即:android studio在我的build.graddle文件中添加了一个编译代码版本即: compile 'com.android.support:recyclerview-v7:25.0.0'这是从我的SDK版本24.2.1.Hence不同我申请以下修正即:

compile 'com.android.support:recyclerview-v7:24.2.1' 

总的来说,这种校正只能停在应用程序崩溃,但并没有解决显示问题我的数据列表。以下链接解决了主要问题 - 铸造。在此平台上,关于cast-error-with-firebaserecyclerviewadapter的链接是a previous question。所以我跟着它,它的工作。

0

替换

 //Adapter 
    FirebaseRecyclerAdapter<String, MessageViewHolder> mFirebaseAdapter= 
      new FirebaseRecyclerAdapter<String, MessageViewHolder>(
        String.class, 
        android.R.layout.simple_list_item_1, 
        MessageViewHolder.class, 
        myRef.child("Message") 
      ) 

//Adapter 
    FirebaseRecyclerAdapter<String, MessageViewHolder> mFirebaseAdapter= 
      new FirebaseRecyclerAdapter<String, MessageViewHolder>(
        String.class, 
        android.R.layout.simple_list_item_1, 
        MessageViewHolder.class, 
        myRef 
      ) 

用myRef替换myRef.child(“Message”)。 根据您的onAdd方法。

+0

感谢@Nirel的建议。但我已经尝试过,并且仍然没有工作。内容被添加到FireBaseDatabase而不显示在我的RecyclerView中! –

相关问题