繁体   English   中英

来自 Firebase 的数据未显示在片段中的 RecyclerView 中

[英]Data from Firebase is not displayed in the RecyclerView that is in the fragment

运行程序时recyclerview显示的数据有问题

它看起来像这样: .

对于显示的数据,我像这样使用 firebase

数据结构:

当我想在一个片段中在 recyclerview 中显示数据,但数据没有出现时。 我使用 Firebase 作为数据库

NotaAdapter.java

public class NotaAdapter extends RecyclerView.Adapter<NotaAdapter.MyViewHolder> {

Context context;
ArrayList<ListNota> listnota;

public NotaAdapter (Context c,ArrayList<ListNota> p) {
    this.context = c;
    this.listnota = p;
}

@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int i) {
    return new MyViewHolder(LayoutInflater.from(context)
            .inflate(R.layout.item_nota, parent, false));
}

@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {
    myViewHolder.no_nota.setText(listnota.get(i).getId_nota());
    myViewHolder.total_harga.setText(String.valueOf(listnota.get(i).getTotal_seluruh()));

    final String getnoNOta = listnota.get(i).getId_nota();


    myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent gotoDetailNota = new Intent(context, DetailNotaAct.class);
            gotoDetailNota.putExtra("no_nota", getnoNOta);
            context.startActivity(gotoDetailNota);
        }
    });
}

@Override
public int getItemCount() {
    return listnota.size();
}

class MyViewHolder extends RecyclerView.ViewHolder {

    TextView no_nota, total_harga;

    public MyViewHolder(@NonNull View itemView) {
        super(itemView);

        no_nota = itemView.findViewById(R.id.xid_nota);
        total_harga = itemView.findViewById(R.id.xtotal_seluruh);
    }
}
}

ListNota.java

public class ListNota {
private String id_nota;
private Integer total_seluruh;

public ListNota() {

}

public ListNota(String id_nota, Integer total_seluruh) {
    this.id_nota = id_nota;
    this.total_seluruh = total_seluruh;
}

public String getId_nota() {
    return id_nota;
}

public void setId_nota(String id_nota) {
    this.id_nota = id_nota;
}

public Integer getTotal_seluruh() {
    return total_seluruh;
}

public void setTotal_seluruh(Integer total_seluruh) {
    this.total_seluruh = total_seluruh;
}
}

历史片段.java

public class HistoryFragment extends Fragment {

TextView txt_history, txt_toko, txt_report, txt_nama_toko, txt_jenis_toko;
LinearLayout btn_buat_nota;

DatabaseReference databaseUser, databaseToko, databaseNota;

String USERNAME_KEY = "usernamekey";
String username_key = "";
String username_key_new = "";
String id_Toko = "";

ProgressDialog progress;

RecyclerView nota_place;
ArrayList<ListNota> list;
NotaAdapter notaAdapter;


private View Notaview;

public HistoryFragment(){

}

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    Notaview = inflater.inflate(R.layout.fragment_history, container, false);

    txt_nama_toko = (TextView) Notaview.findViewById(R.id.txt_nama_toko);
    txt_jenis_toko = (TextView) Notaview.findViewById(R.id.txt_jenis_toko);
    txt_history = (TextView) Notaview.findViewById(R.id.txt_history);
    txt_toko = (TextView) Notaview.findViewById(R.id.txt_toko);
    txt_report = (TextView) Notaview.findViewById(R.id.txt_report);
    btn_buat_nota = (LinearLayout) Notaview.findViewById(R.id.btn_buat_nota);


    progress = new ProgressDialog(getActivity());
    progress.setTitle("Loading");
    progress.setMessage("Memuat Data");
    progress.setCancelable(false);
    progress.show();


    getUsernameLocal();

    databaseUser = FirebaseDatabase.getInstance().getReference().child("Users").child(username_key_new);
    databaseUser.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            id_Toko = dataSnapshot.child("id_toko").getValue().toString();

            databaseToko = FirebaseDatabase.getInstance().getReference().child("Toko").child(id_Toko);
            databaseToko.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                    txt_nama_toko.setText(dataSnapshot.child("nama_toko").getValue().toString());

                    //cek apakah child jenis toko ada
                    if (dataSnapshot.hasChild("jenis_toko")){
                        txt_jenis_toko.setText(dataSnapshot.child(" jenis_toko").getValue().toString());
                    }else{
                        txt_jenis_toko.setText("Jenis toko belum disetting");
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

    btn_buat_nota.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            final String id_nota = generateRandomString(16);
            Intent gotoBuatNota = new Intent(getActivity(), BuatNotaAct.class);
            gotoBuatNota.putExtra("id_nota", id_nota);
            startActivity(gotoBuatNota);
        }
    });

    nota_place = (RecyclerView) Notaview.findViewById(R.id.nota_place);
    notaAdapter = new NotaAdapter(getContext(), list);
    nota_place.setAdapter(notaAdapter);
    nota_place.setLayoutManager(new LinearLayoutManager(getActivity()));
    return Notaview;
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    list = new ArrayList<ListNota>();
    loaddata();

}




private void loaddata(){
    databaseNota = FirebaseDatabase.getInstance().getReference().child("Nota").child(id_Toko);
    databaseNota.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot dataSnapshot1: dataSnapshot.getChildren()){

                ListNota p = dataSnapshot1.getValue(ListNota.class);
                list.add(p);
            }
            progress.dismiss();
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}


public String generateRandomString(int length){
    char[] chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
    StringBuilder stringBuilder = new StringBuilder();
    Random random = new Random();
    for(int i = 0; i < length; i++){
        char c = chars[random.nextInt(chars.length)];
        stringBuilder.append(c);
    }
    return stringBuilder.toString();
}

public void getUsernameLocal(){
    SharedPreferences sharedPreferences = getActivity().getSharedPreferences(USERNAME_KEY, MODE_PRIVATE);
    username_key_new = sharedPreferences.getString(username_key,"");
}
}

您正在从错误的节点读取它,您正在传递要从名为“users”的节点读取数据的引用。

您的数据库参考应如下所示

databaseUser = FirebaseDatabase.getInstance().getReference("Nota").child("Toko_Kita20082020371").child(username_key_new);

还要确保您的列表应该包含节点具有的所有变量。 例如一个节点有

name,id,price,description;

然后应在您的列表中声明相同的变量,以成功从 Firebase 准备好 dta。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM