有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将数据传递到查询中,而不是更新

我正在创建一个简单的程序,用于每天保存值和时间戳

Firebase

保存后,我想为我的回收器视图选择一个日期,以显示与之相关的所有值

是否每次按下按钮时都要更新passDate

我意识到这可能是一个非常简单的解决办法,但我陷入了一个循环

我曾尝试将查询从onCreate中取出,但遇到了问题,我无法将适配器从onCreate中取出,而不会遇到重大问题


共 (1) 个答案

  1. # 1 楼答案

    DatePickerDialog.OnDateSetListener是异步运行的,因此选择一个日期不会阻止应用程序的其余部分。这意味着用户选择的日期仅在onDateSet内可用。所有需要日期的代码都必须在onDateSet之内或从那里调用

    因此,最简单的解决方案是将所有依赖于日期的代码移到onDateSet

    mDateSetListener = new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker datePicker, int year, int month, int day) {
            month = month + 1;
            String yearAsString = Integer.toString(year);
            String monthAsString = Integer.toString(month);
            String dayAsString = Integer.toString(day);
            if (day <= 9 & month <= 9) {
                String date = "0" + dayAsString + "-" + "0" + monthAsString + "-" + yearAsString;
                mDisplayDate.setText(date);
            } else if (day <= 9 & month > 9) {
                String date = "0" + dayAsString + "-" + monthAsString + "-" + yearAsString;
                mDisplayDate.setText(date);
            } else if (month <= 9) {
                String date = dayAsString + "-" + "0" + monthAsString + "-" + yearAsString;
                mDisplayDate.setText(date);
            } else {
                String date = dayAsString + "-" + monthAsString + "-" + yearAsString;
                mDisplayDate.setText(date);
            }
    
            String passDate = mDisplayDate.getText().toString().trim();
    
            Log.i(TAG, "PassDate = " + passDate);
    
            Query query = databaseReference.orderByChild("timestamp").equalTo(passDate);
            options = new FirebaseRecyclerOptions.Builder<Records>().setQuery(query, Records.class).build();
    
            adapter = new FirebaseRecyclerAdapter<Records, RecordsViewHolder>(options) {
                @Override
                protected void onBindViewHolder(@NonNull RecordsViewHolder holder, int position, @NonNull Records model) {
                    holder.t1.setText(model.getTimestamp());
    
                }
    
                @NonNull
                @Override
                public RecordsViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    
                    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.saved_records_view, viewGroup, false);
    
                    return new RecordsViewHolder(view);
                }
            };
            GridLayoutManager gridLayoutManager = new GridLayoutManager(getApplicationContext(), 1);
            recyclerView.setLayoutManager(gridLayoutManager);
            recyclerView.setAdapter(adapter);
        }
    };
    

    您还可以让视图类实现DatePickerDialog.OnDateSetListener,以稍微减少缩进:

    public class SavedFeedRecords extends AppCompatActivity implements DatePickerDialog.OnDateSetListener {
    

    这意味着onDateSet成为SavedFeedRecords上的常规方法:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_saved_feed_records);
        mDisplayDate = findViewById(R.id.tvDate);
        recyclerView = findViewById(R.id.recyclerView);
        recyclerView.setHasFixedSize(true);
    
        databaseReference = FirebaseDatabase.getInstance().getReference().child(fAuth.getCurrentUser().getUid()).child("feedRecords");
    
    
        findViewById(R.id.tvDate).setOnClickListener(displayDate);
        findViewById(R.id.button).setOnClickListener(viewRecords);
    };
    
    public void onDateSet(DatePicker datePicker, int year, int month, int day) {
        month = month + 1;
        String yearAsString = Integer.toString(year);
        String monthAsString = Integer.toString(month);
        String dayAsString = Integer.toString(day);
        if (day <= 9 & month <= 9) {
            String date = "0" + dayAsString + "-" + "0" + monthAsString + "-" + yearAsString;
            mDisplayDate.setText(date);
        } else if (day <= 9 & month > 9) {
            String date = "0" + dayAsString + "-" + monthAsString + "-" + yearAsString;
            mDisplayDate.setText(date);
        } else if (month <= 9) {
            String date = dayAsString + "-" + "0" + monthAsString + "-" + yearAsString;
            mDisplayDate.setText(date);
        } else {
            String date = dayAsString + "-" + monthAsString + "-" + yearAsString;
            mDisplayDate.setText(date);
        }
        String passDate = mDisplayDate.getText().toString().trim();
    
        Log.i(TAG, "PassDate = " + passDate);
    
        Query query = databaseReference.orderByChild("timestamp").equalTo(passDate);
        options = new FirebaseRecyclerOptions.Builder<Records>().setQuery(query, Records.class).build();
    
        adapter = new FirebaseRecyclerAdapter<Records, RecordsViewHolder>(options) {
            @Override
            protected void onBindViewHolder(@NonNull RecordsViewHolder holder, int position, @NonNull Records model) {
                holder.t1.setText(model.getTimestamp());
    
            }
    
            @NonNull
            @Override
            public RecordsViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    
                View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.saved_records_view, viewGroup, false);
    
                return new RecordsViewHolder(view);
            }
        };
        GridLayoutManager gridLayoutManager = new GridLayoutManager(getApplicationContext(), 1);
        recyclerView.setLayoutManager(gridLayoutManager);
        recyclerView.setAdapter(adapter);
    }