【问题标题】:Firebase RecyclerView in Fragment [duplicate]片段中的Firebase RecyclerView [重复]
【发布时间】:2018-08-19 10:33:05
【问题描述】:

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

我的历史课

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;
}
}

我正在使用这个viewholder类。

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>

【问题讨论】:

    标签: android android-studio android-fragments firebase-realtime-database firebaseui


    【解决方案1】:

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

    给你的建议:

    1. 查看 Firebase 中的 sample app,它开发得很好。

    可能的问题:

    1. 您的数据库键的名称与您的 History 类不同。解决方案是重命名数据库/代码中的所有对象名称。例如:

      public String Date;
      

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

    这就是我上次解决问题的方法。

    【讨论】:

      【解决方案2】:

      要获取您需要订阅的数据

      adapter.startListening();
      

      然后使用adapter.stopListening();取消订阅

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

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

      @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());
              }
      

      【讨论】:

      • " " 实际上是用来检查问题是通货膨胀还是检索数据。
      猜你喜欢
      • 2018-07-24
      • 2018-09-16
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      • 1970-01-01
      • 2020-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多