片段中的 Firebase RecyclerView

Firebase RecyclerView in Fragment

任何人都可以帮助解决这种情况吗?我想在 firebase 数据库的片段中的回收视图中显示历史记录。但是不显示。我不知道出了什么问题。该应用程序运行良好,但在 recyclerview 中未显示任何内容。

我的历史class

public class History {

public String Date;
public String Amount;
public String Via;
public String Mobile_Number;

public History() {
}

public History(String date, String amount, String via, String mobile_Number)  
{
    Date = date;
    Amount = amount;
    Via = via;
    Mobile_Number = mobile_Number;
}

public String getDate() {
    return Date;
}

public void setDate(String date) {
    Date = date;
}

public String getAmount() {
    return Amount;
}

public void setAmount(String amount) {
    Amount = amount;
}

public String getVia() {
    return Via;
}

public void setVia(String via) {
    Via = via;
}

public String getMobile_Number() {
    return Mobile_Number;
}

public void setMobile_Number(String mobile_Number) {
    Mobile_Number = mobile_Number;
}
}

我正在使用这个取景器class。

public class History {

public String Date;
public String Amount;
public String Via;
public String Mobile_Number;

public History() {
}

public History(String date, String amount, String via, String mobile_Number) 
{
    Date = date;
    Amount = amount;
    Via = via;
    Mobile_Number = mobile_Number;
}

public String getDate() {
    return Date;
}

public void setDate(String date) {
    Date = date;
}

public String getAmount() {
    return Amount;
}

public void setAmount(String amount) {
    Amount = amount;
}

public String getVia() {
    return Via;
}

public void setVia(String via) {
    Via = via;
}

public String getMobile_Number() {
    return Mobile_Number;
}

public void setMobile_Number(String mobile_Number) {
    Mobile_Number = mobile_Number;
}
}

此片段用于寻呼机。

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    mMainView = inflater.inflate(R.layout.fragment_profile, container, 
false);


    recyclerView = (RecyclerView) 
mMainView.findViewById(R.id.profile_recycler);


    String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
    String email = FirebaseAuth.getInstance().getCurrentUser().getEmail();


    mDatabase = 
FirebaseDatabase.getInstance().getReference().child("Users").child(uid);
    mDatabase.keepSynced(true);



    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

    Query query = FirebaseDatabase.getInstance()
            .getReference()
            .child("Users").child(uid).child("History").orderByKey();

    FirebaseRecyclerOptions<History> options = new 
FirebaseRecyclerOptions.Builder<History>()
            .setQuery(query, History.class).build();

    FirebaseRecyclerAdapter adapter = new 
FirebaseRecyclerAdapter<History,HistoryViewHolder>(options) {
        @Override
        protected void onBindViewHolder(@NonNull HistoryViewHolder holder, 
int position, @NonNull History model) {
            holder.setAmountText("100");
            holder.setDateText("dd-mm-yyyy");
            holder.setMobileText("model.getMobile_Number()");
            holder.setViaText("model.getVia()");
        }


        @Override
        public HistoryViewHolder onCreateViewHolder(ViewGroup parent, int 
viewType) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.history_layout,parent,false);

            return new HistoryViewHolder(view);
        }
    };

    recyclerView.setAdapter(adapter);

    return mMainView;
}

填充每个数据的历史布局

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


<TextView
    android:id="@+id/history_date"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="0dp"
    android:layout_marginTop="4dp"
    android:fontFamily="serif"
    android:text="Date"
    android:textColor="@color/colorPrimary"
    android:textStyle="bold" />

<TextView
    android:id="@+id/history_mobile_number"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignTop="@+id/history_date"
    android:layout_marginStart="16dp"
    android:layout_toEndOf="@+id/history_date"
    android:text="Mobile Number" />

<TextView
    android:id="@+id/history_via"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignStart="@+id/history_mobile_number"
    android:layout_below="@id/history_mobile_number"
    android:text="Via"
    android:textStyle="bold" />

<TextView
    android:id="@+id/history_amount"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignStart="@+id/history_via"
    android:layout_below="@+id/history_via"
    android:layout_marginBottom="4dp"
    android:text="Taka" />
</RelativeLayout>

要获取您需要订阅的数据

adapter.startListening();

然后使用 adapter.stopListening();

退订

您需要在设置适配器后开始收听。您可以在片段中的 onStart() 方法中执行此操作并在 onStop() 中停止。在你这样做之前添加检查适配器是否为空,否则你可能会得到 nullpointerexeption。这个 firebase 适配器可能很棘手。一旦我尝试使用它并最终用常规的 RecyclerViewAdapter class 重写了整个东西。

此外,我看到您在方法调用周围使用了 ""。您正在从该文本创建一个字符串,但不会按预期调用它。删除 ""

@Override
        protected void onBindViewHolder(@NonNull HistoryViewHolder holder, 
int position, @NonNull History model) {
            holder.setAmountText("100");
            holder.setDateText("dd-mm-yyyy");
            holder.setMobileText(model.getMobile_Number());
            holder.setViaText(model.getVia());
        }

你不能在Whosebug直接问答案,作为一个软件开发者,你应该学会调试,如果你不会调试,你可以post异常消息和代码一起,而不仅仅是代码。

给你的建议:

  1. 通过 Firebase 的sample app,它很发达。

可能的问题:

  1. 您的数据库密钥的名称与您的历史记录不同 class。解决方案是重命名 database/code 中的所有对象名称。例如:

    public String Date;
    

public String date; 
//make sure your database date has the same naming convention(spelling, capitalisation etc).

我上次就是这样解决的。