使用 Firebaseui 的 Recyclerview null

Posted

技术标签:

【中文标题】使用 Firebaseui 的 Recyclerview null【英文标题】:Recyclerview null with Firebaseui 【发布时间】:2021-07-12 10:38:12 【问题描述】:

我尝试使用 FirebaseUI RecyclerView 从 RealtimeDatabse 检索数据,但没有出现任何内容。我尝试了很多教程并进行了很多搜索,但没有任何帮助。我想在文本视图中从“Parcare2”中检索状态。 RecyclerView 所在的 MainAcvitiy:

public class Parcare extends AppCompatActivity 
    private RecyclerView recview;
    ArrayList<Model_parcare> model_parcares;
   Adapter_parcare adapter_parcare;
    DatabaseReference mref;
    FirebaseDatabase firebaseDatabase;


    String a;


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


        Log.d("opx", String.valueOf(mref));
        recview=(RecyclerView)findViewById(R.id.recview);
        mref= FirebaseDatabase.getInstance().getReference().child("PARCARE");
        mref.addListenerForSingleValueEvent(new ValueEventListener() 
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) 
                String name=snapshot.child("LOC").getValue().toString();
                a=name;

            

            @Override
            public void onCancelled(@NonNull DatabaseError error) 

            
        );
        recview.setLayoutManager(new LinearLayoutManager(this));
        Query query = FirebaseDatabase.getInstance()
                .getReference().child("Parcare2").child("status");
       query.addListenerForSingleValueEvent(new ValueEventListener() 
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) 
                String name=snapshot.getValue().toString();
                a=name;
                Log.d("pore",name);
            

            @Override
            public void onCancelled(@NonNull DatabaseError error) 

            
        );

        FirebaseRecyclerOptions<Model_parcare> options =
                new FirebaseRecyclerOptions.Builder<Model_parcare>()
                        .setQuery(query, Model_parcare.class)
                        .build();
    Log.d("pte",query.toString());

        adapter_parcare=new Adapter_parcare(options);
        recview.setAdapter(adapter_parcare);
     

    @Override
    protected void onStart() 
        super.onStart();
        adapter_parcare.startListening();
    
    @Override
    protected void onStop() 
        super.onStop();
        adapter_parcare.stopListening();
    


    

RecyclerView 适配器:

    public class Adapter_parcare  extends FirebaseRecyclerAdapter<Model_parcare,Adapter_parcare.myviewholder>


    /**
     * Initialize a @link RecyclerView.Adapter that listens to a Firebase query. See
     * @link FirebaseRecyclerOptions for configuration options.
     *
     * @param options
     */
    public Adapter_parcare(@NonNull FirebaseRecyclerOptions<Model_parcare> options) 
        super(options);
    

    @Override
    protected void onBindViewHolder(@NonNull myviewholder holder, int position, @NonNull Model_parcare model) 
holder.textView.setText(model.getStare());
Log.d("wes",holder.textView.toString());
    

    @NonNull
    @Override
    public myviewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) 
      View view=LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_parcare,parent,false);
      return new myviewholder(view);
    

    class myviewholder extends RecyclerView.ViewHolder
        TextView textView;
        public myviewholder(@NonNull View itemView) 
            super(itemView);
            textView=itemView.findViewById(R.id.stare_loc);
            Log.d("lkj",textView.toString());

        
     

模型类:

public class Model_parcare 
   public String stare;
Model_parcare()


public Model_parcare(String stare) 
    this.stare = stare;



public String getStare() 
    return stare;

我存储数据的 xml:

<?xml version="1.0" encoding="utf-8"?>







    <androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_
        android:layout_
        <LinearLayout
            android:layout_
            android:layout_
            android:orientation="horizontal">

            <TextView
                android:id="@+id/stare_loc"
                android:layout_
                android:layout_
                android:text="Stare"

                android:textColor="#FFE933"
                android:textSize="30dp" />
        </LinearLayout>
    </androidx.cardview.widget.CardView>

和recyvlerview的xml:

 <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:background="#FFFFFF"

android:layout_>

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recview"
    android:layout_
    android:layout_
    android:background="@color/black"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"

    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

我的 Firebase 看起来像这样:

【问题讨论】:

第一步是停止忽略可能的错误。 onCancelled 至少应如下所示:public void onCancelled(@NonNull DatabaseError error) throw error.toException(); 【参考方案1】:

第二:/Parcare2/status 下有一个值,但您试图在回收站视图中显示它,该视图旨在显示项目列表。 FirebaseRecyclerAdapter 用于处理节点列表,而不是您在此处的单个值。

让它工作的一个简单方法是:

Query query = FirebaseDatabase.getInstance().getReference("Parcare2");
FirebaseRecyclerOptions<Model_parcare> options =
        new FirebaseRecyclerOptions.Builder<String>()
                .setQuery(query, new SnapshotParser<String>() 
                    @NonNull
                    @Override
                    public String parseSnapshot(@NonNull DataSnapshot snapshot) 
                        return snapshot.getValue(String.class);
                    
                ))
                .build();
adapter_parcare=new FirebaseRecyclerAdapter(options);
recview.setAdapter(adapter_parcare);

使用此代码,适配器将显示Parcare2 下每个属性的值。因此,对于问题中的 JSON,它只会显示一项“ocupat”,但您可以添加更多属性,它们会显示出来。

【讨论】:

谢谢!它帮助了我!

以上是关于使用 Firebaseui 的 Recyclerview null的主要内容,如果未能解决你的问题,请参考以下文章

FirebaseUI - 在创建用户之前验证 displayName

需要 firebaseUI - 未定义窗口

使用 Firebaseui 的 Recyclerview null

Facebook 的 FirebaseUI 身份验证不起作用

无法使用 FirebaseUI 隐藏授权活动的标题栏

将 FirebaseUI 与 Twitter 登录一起使用(iOS 应用)