Android 时间选择器:错误 - 接口未实现(IceCreamSandwich 4.0.3)
Android time picker: Error - Interface not implemented (IceCreamSandwich 4.0.3)
我正在编写一个小应用程序来练习 AlarmManager,它应该可以在旧 Android 手机中使用。我认为 4.0.3 IceCreamSandwich 对于我的目的来说已经足够低了。
该应用程序尚未完成,但其中的功能足以在现实生活中崩溃。当我 运行 使用 Nexus 5X (API 25) 的模拟器上的应用程序时,该应用程序目前运行良好,时间选择器的值被读取并显示在屏幕上。
但是,当我 运行 它在我的 HTC One V (Android 4.0.3 API 15) 上真实存在时,不会从时间选择器中读取值,并且我在LogCat:
E/Handler: Failed to handle callback; interface not implemented,
callback:android.view.View$PerformClick@40e1cb80
java.lang.NoSuchMethodError: android.widget.TimePicker.getHour
我的代码如下。 OnClickListener 调用 display_time(),从时间选择器读取小时和分钟值时失败。
package com.schalkx.alarm101;
import android.app.AlarmManager;
import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.TimePicker;
import java.util.Calendar;
public class MainActivity extends AppCompatActivity {
AlarmManager alarm_manager;
TimePicker alarm_time_picker;
TextView update_text;.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initialize the alarm manager
alarm_manager = (AlarmManager) getSystemService(ALARM_SERVICE);
// Initialize the time picker
alarm_time_picker = (TimePicker) findViewById(R.id.timePicker);
// Initialize the update box
update_text = (TextView) findViewById(R.id.update_text);
// Create a calendar instance
final Calendar calendar = Calendar.getInstance();
// Initialize the start alarm button
Button alarm_on = (Button) findViewById(R.id.alarm_on);
// Implement OnClickListener
alarm_on.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Update the update_text
display_time();
}
});
}
private void set_alarm_text(String output) {
update_text.setText(output);
}
public void display_time() {
int hours;
int minutes;
String hours_string;
String minutes_string;
hours = alarm_time_picker.getHour(); // *** Error occurs here
minutes = alarm_time_picker.getMinute();
hours_string = String.valueOf(hours);
minutes_string = String.valueOf(minutes);
set_alarm_text(hours_string + ":" + minutes_string);
}
}
知道 4.0.3 中出现错误的原因吗?
谢谢!
Kx
https://developer.android.com/reference/android/widget/TimePicker.html#getHour()
已添加到 API 级别 23。
您的 HTC phone 使用较低级别的 API。
只需切换到使用 getCurrentHour(),虽然已弃用,但在 phone 上都可用。
如果你真的想疯了,你可以使用 TimePicker 的 java.lang.Class 对象来检查方法 getCurrentHour() 是否存在,使用像 getDeclaredMethod, https://developer.android.com/reference/java/lang/Class.html#getDeclaredMethod(java.lang.String, java.lang.Class...),但在这种情况下确实没有必要。
我正在编写一个小应用程序来练习 AlarmManager,它应该可以在旧 Android 手机中使用。我认为 4.0.3 IceCreamSandwich 对于我的目的来说已经足够低了。
该应用程序尚未完成,但其中的功能足以在现实生活中崩溃。当我 运行 使用 Nexus 5X (API 25) 的模拟器上的应用程序时,该应用程序目前运行良好,时间选择器的值被读取并显示在屏幕上。 但是,当我 运行 它在我的 HTC One V (Android 4.0.3 API 15) 上真实存在时,不会从时间选择器中读取值,并且我在LogCat:
E/Handler: Failed to handle callback; interface not implemented,
callback:android.view.View$PerformClick@40e1cb80
java.lang.NoSuchMethodError: android.widget.TimePicker.getHour
我的代码如下。 OnClickListener 调用 display_time(),从时间选择器读取小时和分钟值时失败。
package com.schalkx.alarm101;
import android.app.AlarmManager;
import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.TimePicker;
import java.util.Calendar;
public class MainActivity extends AppCompatActivity {
AlarmManager alarm_manager;
TimePicker alarm_time_picker;
TextView update_text;.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initialize the alarm manager
alarm_manager = (AlarmManager) getSystemService(ALARM_SERVICE);
// Initialize the time picker
alarm_time_picker = (TimePicker) findViewById(R.id.timePicker);
// Initialize the update box
update_text = (TextView) findViewById(R.id.update_text);
// Create a calendar instance
final Calendar calendar = Calendar.getInstance();
// Initialize the start alarm button
Button alarm_on = (Button) findViewById(R.id.alarm_on);
// Implement OnClickListener
alarm_on.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Update the update_text
display_time();
}
});
}
private void set_alarm_text(String output) {
update_text.setText(output);
}
public void display_time() {
int hours;
int minutes;
String hours_string;
String minutes_string;
hours = alarm_time_picker.getHour(); // *** Error occurs here
minutes = alarm_time_picker.getMinute();
hours_string = String.valueOf(hours);
minutes_string = String.valueOf(minutes);
set_alarm_text(hours_string + ":" + minutes_string);
}
}
知道 4.0.3 中出现错误的原因吗? 谢谢!
Kx
https://developer.android.com/reference/android/widget/TimePicker.html#getHour()
已添加到 API 级别 23。
您的 HTC phone 使用较低级别的 API。
只需切换到使用 getCurrentHour(),虽然已弃用,但在 phone 上都可用。
如果你真的想疯了,你可以使用 TimePicker 的 java.lang.Class 对象来检查方法 getCurrentHour() 是否存在,使用像 getDeclaredMethod, https://developer.android.com/reference/java/lang/Class.html#getDeclaredMethod(java.lang.String, java.lang.Class...),但在这种情况下确实没有必要。