片段中的 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异常消息和代码一起,而不仅仅是代码。
给你的建议:
- 通过 Firebase 的sample app,它很发达。
可能的问题:
您的数据库密钥的名称与您的历史记录不同 class。解决方案是重命名 database/code 中的所有对象名称。例如:
public String Date;
至
public String date;
//make sure your database date has the same naming convention(spelling, capitalisation etc).
我上次就是这样解决的。
任何人都可以帮助解决这种情况吗?我想在 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异常消息和代码一起,而不仅仅是代码。
给你的建议:
- 通过 Firebase 的sample app,它很发达。
可能的问题:
您的数据库密钥的名称与您的历史记录不同 class。解决方案是重命名 database/code 中的所有对象名称。例如:
public String Date;
至
public String date;
//make sure your database date has the same naming convention(spelling, capitalisation etc).
我上次就是这样解决的。