【发布时间】:2018-07-12 10:11:53
【问题描述】:
我有一个带有 ImageView 的 Activity,它是可点击的。当我单击 ImageView 时,会出现一个对话框,其中包含 3 个选项。当我在对话框中选择 3 位置时,我调用 TimePicker,在其中指定时间并显示在 TextView 中。必须在数据库中填写的所有值都可以正常工作,它们会根据我的需要进行更新和更改。
问题是在 TimePicker 中选择时间后,它正确显示在 TextView 中,并且在数据库中输入了所需的数字,但是当我重新启动应用程序时,我需要在 TextView 中再次显示相同的数字 - 但是这个不会发生。 FireStore 中的值 - 已更改,但重新启动时在 TextView 中 - 没有。
代码:
public class ZoneOne extends AppCompatActivity implements View.OnClickListener{
private ImageView mSceneOne, mSceneTwo;
private TextView mTextOne, mTextTwo;
public static final String KEY_SCENE_ONE = "scene_one";
public static final String KEY_SCENE_TWO = "scene_two";
public static final String KEY_TIME_ONE = "time_one";
public static final String KEY_TIME_TWO = "time_two";
private FirebaseFirestore db = FirebaseFirestore.getInstance();
private DocumentReference tables = db.collection("New Collection").document("New Document");
private ArrayList mSelectedItems;
private AlertDialog.Builder builder;
private TimePickerDialog time;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_zone_one);
mSceneOne = findViewById(R.id.scene_one);
mSceneTwo = findViewById(R.id.scene_two);
mTextOne = findViewById(R.id.time_scene_one);
mTextTwo = findViewById(R.id.time_scene_two);
mTextOne.setVisibility(View.GONE);
mTextTwo.setVisibility(View.GONE);
mSceneOne.setOnClickListener(this);
mSceneTwo.setOnClickListener(this);
tables.get()
.addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
@Override
public void onSuccess(DocumentSnapshot documentSnapshot) {
if (documentSnapshot.exists()) {
String scene_one = documentSnapshot.getString("scene_one");
String one = documentSnapshot.getString("time_one");
switch (scene_one) {
case "0":
mTableOne.setImageResource(R.drawable.one_green);
break;
case "1":
mTableOne.setImageResource(R.drawable.one_red);
break;
default:
mTableOne.setImageResource(R.drawable.one_grey);
mTextOne.setText(one);
mTextOne.setVisibility(View.VISIBLE);
break;
}
String seat_two = documentSnapshot.getString("seat_two");
String time_for_two = documentSnapshot.getString("time_two");
switch (seat_two) {
case "0":
mTableTwo.setImageResource(R.drawable.two_green);
break;
case "1":
mTableTwo.setImageResource(R.drawable.two_red);
break;
default:
mTableTwo.setImageResource(R.drawable.two_grey);
mTextTwo.setVisibility(View.VISIBLE);
mTextOne.setText(time_for_two);
break;
}
} else {
Map<String, Object> allData = new HashMap<>();
allData.put(KEY_SCENE_ONE, "0");
allData.put(KEY_SCENE_TWO, "0");
allData.put(KEY_TIME_ONE, "");
allData.put(KEY_TIME_TWO, "");
tables.set(allData);
}
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
}
});
}
private void createDialog(int state_one, int state_two, int state_three, String key, ImageView view, TextView time, String time_key) {
mSelectedItems = new ArrayList();
builder = new AlertDialog.Builder(this);
final int finalState_one = state_one;
final int finalState_two = state_two;
final int finalState_three = state_three;
final String KEY = key;
final ImageView V = view;
final TextView Time = time;
final String TIME = time_key;
final Map<String, Object> note = new HashMap<>();
builder.setTitle("Please choose!")
.setSingleChoiceItems(R.array.tables, -1,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0:
mSelectedItems.add(which);
break;
case 1:
mSelectedItems.add(which);
break;
case 2:
mSelectedItems.add(which);
break;
}
}
})
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
if (mSelectedItems.contains(0)){
V.setImageResource(finalState_one);
note.put(KEY, "0");
tables.update(note);
Time.setVisibility(View.INVISIBLE);
}else if (mSelectedItems.contains(1)){
V.setImageResource(finalState_two);
note.put(KEY, "1");
tables.update(note);
Time.setVisibility(View.INVISIBLE);
}else if (mSelectedItems.contains(2)){
V.setImageResource(finalState_three);
note.put(KEY, "2");
tables.update(note);
Time.setVisibility(View.VISIBLE);
showTimePicker(Time, TIME);
}
dialog.dismiss();
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
}).create();
AlertDialog dialog = builder.create();
dialog.show();
}
private void showTimePicker(TextView view, String key_time) {
final TextView V = view;
final String KEY_TIME = key_time;
final Map<String, Object> note_time = new HashMap<>();
final Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
time = new TimePickerDialog(ZoneOne.this, new TimePickerDialog.OnTimeSetListener() {
@SuppressLint("SetTextI18n")
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
V.setText(hourOfDay + ":" + minute);
String time = hourOfDay + ":" + minute;
note_time.put(KEY_TIME, time);
tables.update(note_time);
}
}, hour, minute, true );
time.show();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.table_one:
createDialog(R.drawable.one_green, R.drawable.one_red, R.drawable.one_grey, KEY_SCENE_ONE, mSceneOne, mTextOne, KEY_TIME_ONE);
break;
case R.id.table_two:
createDialog(R.drawable.two_green, R.drawable.two_red, R.drawable.two_grey, KEY_SCENE_TWO, mSceneTwo, mTextTwo, KEY_TIME_TWO);
break;
}
}
}
【问题讨论】:
-
请添加您的数据库结构。
-
请不要删除和转发your question。这可能会导致自动提问。
-
@AlexMamo 更新了!
-
@AndréKool 哦,我想我没有正确理解,该怎么做。
标签: android firebase firebase-realtime-database google-cloud-firestore