简体   繁体   English

如何使用RecyclerView从Firebase获取密钥

[英]How to get key from firebase using RecyclerView

I can get key and show in Log.d but it don't show in RecyclerView. 我可以获取密钥并在Log.d中显示,但不能在RecyclerView中显示。 What's wrong with it? 它出什么问题了?

HistoryActivity.java it contains my recyclerView: HistoryActivity.java它包含我的recyclerView:

public class HistoryActivity extends AppCompatActivity {

    FirebaseFirestore mFirestore;
    FirebaseAuth firebaseAuth;
    FirebaseDatabase database;

    RecyclerView mHisList;
    ArrayList<PreviousLst> history;
    adt_rv_HisList adtRvHisList;

    TextView ptName;
    TextView ptPort;

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_history);

        getSupportActionBar().setSubtitle("History");

        Intent it = getIntent();
        String patName = it.getStringExtra("nm");
        String patID = it.getStringExtra("idpat");
        String portNum = it.getStringExtra("pNum");
        String regisDate = it.getStringExtra("rdate");

        ptName = findViewById(R.id.txName);
        ptPort = findViewById(R.id.portpassValue);

        ptName.setText(patName);
        ptPort.setText(portNum);

        history = new ArrayList<>();

        setupRecyclerView();
        setupFireBase();
        loadDataFromDatabase(portNum);

    }

    private void setupFireBase() {

        mFirestore = FirebaseFirestore.getInstance();
        firebaseAuth = FirebaseAuth.getInstance();
        database = FirebaseDatabase.getInstance();

    }

    private void setupRecyclerView() {
        mHisList = findViewById(R.id.rv_prev_lst);
        mHisList.setHasFixedSize(true);
        mHisList.setLayoutManager(new LinearLayoutManager(this));
        mHisList.setAdapter(adtRvHisList);
    }

    public void loadDataFromDatabase(String portNum) {
        if(history.size()>0)
            history.clear();

        DatabaseReference myRef;
        DatabaseReference passref;

        switch (portNum){

            case "Huang-Yai0002":
                String p2 = "NETEKG-Huang-Yai0002";
                myRef = database.getReference("MACHINE");
                passref = myRef.child(p2).child("value");

                passref.addValueEventListener(new ValueEventListener(){
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {

                        for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {

                            String keydate = postSnapshot.getKey();
                            Log.d(TAG, "Child are: " + keydate );
                            PreviousLst previousLst = new PreviousLst(keydate);
                            history.add(previousLst);
                        }
                        adtRvHisList = new adt_rv_HisList(HistoryActivity.this, history);
                        mHisList.setAdapter(adtRvHisList);
                    }
                    @Override
                    public void onCancelled(DatabaseError error) {
                        Log.w(TAG, "Failed to read value.", error.toException());
                    }
                });
                break;

            case "Huang-Yai0003":
                String p3 = "NETEKG-Huang-Yai0003";
                myRef = database.getReference("MACHINE");
                passref = myRef.child(p3).child("value");

                passref.addValueEventListener(new ValueEventListener(){
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {

                        for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
                            String keydate = postSnapshot.getKey();
                            Log.d(TAG, "Child are: " + keydate );
                            PreviousLst previousLst = new PreviousLst(postSnapshot.getKey());
                            history.add(previousLst);
                        }
                        adtRvHisList = new adt_rv_HisList(HistoryActivity.this, history);
                        mHisList.setAdapter(adtRvHisList);
                    }
                    @Override
                    public void onCancelled(DatabaseError error) {

                        Log.w(TAG, "Failed to read value.", error.toException());
                    }
                });
                break;
            default:
                Log.d(TAG, "Value is: " + portNum);
                Toast.makeText(getApplicationContext(),"Error...",Toast.LENGTH_LONG).show();
                break;

        }
    }
}

adt_rv_HisList.java Adapter: adt_rv_HisList.java适配器:

public class adt_rv_HisList extends RecyclerView.Adapter<adtrvHisListViewHolder> {
    HistoryActivity historyActivity;
    ArrayList<PreviousLst> history;


    public adt_rv_HisList(HistoryActivity historyActivity, ArrayList<PreviousLst> history) {
        this.history = history;
        this.historyActivity = historyActivity;
    }

    @NonNull
    @Override
    public adtrvHisListViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(historyActivity.getBaseContext()).inflate(R.layout.hislist_item, viewGroup, false);
        return new adtrvHisListViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull adtrvHisListViewHolder holder, int position) {

        holder.hdate.setText(history.get(position).getHisDate());

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialogView();
            }
        });
    }

    private void dialogView() {
        final Dialog dia = new Dialog(historyActivity);
        dia.setContentView(R.layout.dialog_ask_view);
        dia.show();

        Button pvgraph = (Button)dia.findViewById(R.id.bt_pvgraph);
        Button pvhr = (Button)dia.findViewById(R.id.bt_pvhrate);
        Button cc = (Button)dia.findViewById(R.id.btn_cancel);

        cc.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dia.dismiss();
            }
        });

        pvgraph.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dia.dismiss();
                Intent it = new Intent(historyActivity, ViewgraphActivity.class);
                historyActivity.startActivity(it);
            }
        });

        pvhr.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dia.dismiss();
                Intent it = new Intent(historyActivity, ViewHRActivity.class);
                historyActivity.startActivity(it);
            }
        });
    }

    @Override
    public int getItemCount() {
        return 0;
    }
}

adtrvHisListViewHolder.java Contains the ViewHolder : adtrvHisListViewHolder.java包含ViewHolder:


public class adtrvHisListViewHolder extends RecyclerView.ViewHolder {

    public TextView hdate;

    public adtrvHisListViewHolder(View itemView) {
        super(itemView);

        hdate = itemView.findViewById(R.id.his_date);
    }
}

PreviousLst.java is Model class for my recyclerView: PreviousLst.java是我的recyclerView的Model类:

public class PreviousLst {
    String HisDate;

    public PreviousLst(String HisDate){
        this.HisDate = HisDate;
    }

    public PreviousLst(){

    }

    public String getHisDate() {
        return HisDate;
    }
    public void setHisDate(String hisDate) {
        HisDate = hisDate;
    }
}

This is my key that I get and show in Log.d 这是我在Log.d中获得并显示的密钥

  • D/ContentValues: Child are: HEART RATE D / ContentValues:子项是:心率
  • D/ContentValues: Child are:LEAD 1 D / ContentValues:子级:LEAD 1
  • Child are: LEAD 2 孩子是:LEAD 2
  • Child are: LEAD 3 孩子是:LEAD 3
  • Child are: LEAD 4 孩子是:LEAD 4
  • Child are: LEAD 5 孩子是:LEAD 5
  • Child are: LEAD 6 孩子是:LEAD 6

but it don't shoe in App. 但它不会在App中启动。 enter image description here 在此处输入图片说明

@Override
public int getItemCount() {
    //return 0;
      replace it with history.size();
}

the added lines tells the adapter how many items, the adapter has to bind the items to the recycler view. 添加的行告诉适配器有多少个项目,适配器必须将这些项目绑定到回收者视图。 By default it is 0, means the adapter class will never call the binView method to show the items at view side 默认情况下为0,意味着适配器类将永远不会调用binView方法在视图侧显示项目

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

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