简体   繁体   中英

Data from Firebase is not displayed in the RecyclerView that is in the fragment

There is a problem with the data displayed in the recyclerview when I run my program

it looks like this: .

For the data that is displayed I use firebase like this the

data structure:

When I want to display data in recyclerview in a fragment, but the data doesn't appear. I use Firebase as database

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

HistoryFragment.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,"");
}
}

you are reading it from the wrong node, you are passing reference that you want to read data from the node Named "users".

Your Database reference should look like this

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

Also make sure your list should have all the variables that a node has. For example a node has

name,id,price,description;

then same varibles should be declared in your list to successfully ready dta from the firebase.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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