gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:18:02 25 4
gpt4 key购买 nike

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

Firebase

保存后,我想为我的回收器 View 选择一个日期,以显示与其关联的所有值

是否有办法让 passDate 在每次按下按钮时更新?

我意识到这可能是一个非常简单的修复,但我让自己陷入了困境。

我曾尝试将查询从 onCreate 中取出,但遇到了麻烦,并且我无法在不遇到重大问题的情况下将适配器从 oncreate 中取出

最佳答案

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

您还可以使 View 类实现 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);
}

关于java - 将数据传递到查询中,而不是更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54536251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com