我向我的应用添加了一个TimePicker。所选时间显示在TextView中,但我以后无法调用String将其发送到服务器。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mArrivalTimepicker = new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
String ArrivalTimeString = hourOfDay + ":" + minute;
TextView ArriavalTime = findViewById(R.id.arrival_time_tv);
ArriavalTime.setText(ArrivalTimeString);
}
};
}
稍后我尝试调用它时,它说“无法解析符号'ArrivalTimeString'。
public void addMessage() {
String arrivalTime = ArrivalTimeString;
}
感谢您的帮助!
编辑: 我现在将String声明为全局。我现在可以调用String了,但是它的Value ist仍然为空。
String ArrivalTimeString;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mArrivalTime = findViewById(R.id.arrival_time_tv);
mArrivalTimepicker = new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
ArrivalTimeString = hourOfDay + ":" + minute;
}
};
mArrivalTime.setText(ArrivalTimeString);
}
因此,选择时间后,它仍然不会显示所选时间。
解决方案:
我仍然在.setText
中呼叫.OnTimeSetListener
。为了稍后使用String,我使用
ArrivalTimeString = mArrivalTime.getText().toString();
答案 0 :(得分:0)
字符串到达时间= ArrivalTime.getText()。toString();
如果分配的字符串和显示的字符串相同。
切勿在任何时间或日期选择器内声明视图。它应该在onCreate()方法中,否则您将无法从时间选择器之外的文本视图中获取数据。
答案 1 :(得分:0)
String ArrivalTimeString = hourOfDay +“:” +分钟; 上面的线应该是 String ArrivalTimeString = String.valueOf(hourOfDay)+“:” + String.valueOf(minute); 同样,您不能在其他函数中使用String ArrivalTimeString,因为您在内联类中声明了它。最好是将其设置为字段/类变量。
答案 2 :(得分:0)
String ArrivalTimeString;
TextView ArriavalTime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArriavalTime = findViewById(R.id.arrival_time_tv);
mArrivalTimepicker = new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
ArrivalTimeString = hourOfDay + ":" + minute;
ArriavalTime.setText(ArrivalTimeString);
}
};
}
如果要在onTimeSet()
方法之外重用ArrivalTimeString,则应将其更改为全局变量而不是局部变量。
在onTimeSet()
内创建ArrivalTimeString时,正在将其创建为局部变量。局部变量将一直存在,直到您在其中声明该方法的末尾为止,因此,一旦到达onTimeSet()
的末尾,ArrivalTimeString变量就已经消失了。
这样,当您尝试在其他方法中使用ArrivalTimeString时,会出现cannot resolve Symbol 'ArrivalTimeString'
错误。
这是因为ArrivalTimeString根本不存在,因为创建它的方法已经完成。
因此,解决此问题的方法是声明 ArrivalTimeString变量为全局变量。通过将变量放置在方法之外,只要类仍然存在,就可以使变量的“生命”存在。
此外,您应该避免在findViewById()
内部使用OnTimeSetListener()
。通过ID查找视图可能是一个昂贵的过程,因此,如果要经常访问TextView,则还应该在OnTimeSet()
之外声明ArriavalTime。这样可以避免您的应用在每次设置时间时都不断搜索视图。
P.S。我相信您可能对于TextView ArriavalTime可能有错字。