Javascript 不同的日期时间选择器问题
在这个程序中,我希望在按钮上显示时间。但它会生成NullpointerException。我试过用Log。它显示在日志中。但是,当开始在按钮上显示时,它会立即显示错误。请问,谁能告诉我这个节目有什么错误吗Javascript 不同的日期时间选择器问题,javascript,android,Javascript,Android,在这个程序中,我希望在按钮上显示时间。但它会生成NullpointerException。我试过用Log。它显示在日志中。但是,当开始在按钮上显示时,它会立即显示错误。请问,谁能告诉我这个节目有什么错误吗 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_w
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<Button android:id="@+id/button_date"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Button android:id="@+id/button_time"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
public class MainActivity extends AppCompatActivity
{
//Declaration for class
Views views;
// Declartion for member vairables
int hours;
int minutes;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Views views = new Views();
// pick up the default date using Calender class
Calendar calendar = Calendar.getInstance(Locale.getDefault());
hours = calendar.get(Calendar.HOUR);
minutes = calendar.get(Calendar.MINUTE);
setupTime(hours, minutes);
}
private void setupTime(int hours, int minutes){
// Log.i("TAG", "------------ " + hours + " ");
// Log.i("TAG", "------------ " + minutes + " ");
views.button_time.setText(String.valueOf(hours));
}
class Views{
Button button_date;
Button button_time;
public Views(){
Button button_date = (Button) findViewById(R.id.button_date);
Button button_time = (Button) findViewById(R.id.button_time);
}
}
}
公共类MainActivity扩展了AppCompatActivity
{
//课堂声明
观点;
//会员虚报的申报
整小时;
整数分钟;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
视图=新视图();
//使用日历类选择默认日期
Calendar Calendar=Calendar.getInstance(Locale.getDefault());
小时=calendar.get(calendar.HOUR);
分钟=calendar.get(calendar.MINUTE);
设置时间(小时、分钟);
}
专用无效设置时间(整数小时,整数分钟){
//Log.i(“标记”,“时间+”);
//Log.i(“TAG”、“--------------+minutes+”);
views.button_time.setText(String.valueOf(hours));
}
类视图{
按钮日期;
按钮时间;
公众意见(){
按钮按钮日期=(按钮)findViewById(R.id.Button按钮日期);
按钮时间=(按钮)findViewById(R.id.Button\u时间);
}
}
}
在视图类构造函数中,将视图分配给其他变量,而不是类中声明的变量
试试这个:
public Views(){
button_date = (Button) findViewById(R.id.button_date);
button_time = (Button) findViewById(R.id.button_time);
}
解释
您在此处声明了两个变量:
class Views{
Button button_date;
Button button_time;
button_date和button_time,只要视图对象处于活动状态,这些变量就会存在
然后,在构造函数中,再次声明它们:
public Views(){
Button button_date = (Button) findViewById(R.id.button_date);
Button button_time = (Button) findViewById(R.id.button_time);
}
尽管它们有相同的名称,但它们是以前声明的不同变量。这两个变量将仅存在于构造函数内部,并且在构造函数完成其工作后,它们的值将不会持久
现在,试着猜一下首先声明的变量中有哪些值?如果您猜测为空,则是正确的。当你试着打电话时会发生什么
views.button_time.setText(...)
在null变量上调用setText,因此会发生NullPointerException
更新2
这里也存在同样的问题:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Views views = new Views();
更改为:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
views = new Views();
试试这个:
public Views() {
this.button_date = (Button) findViewById(R.id.button_date);
this.button_time = (Button) findViewById(R.id.button_time);
}
让我们更改这个类-这部分代码
class Views{
Button button_date;
Button button_time;
public Views(){
Button button_date = (Button) findViewById(R.id.button_date);
Button button_time = (Button) findViewById(R.id.button_time);
}
}
进入
试试这个
public class MainActivity extends AppCompatActivity
{
//Declaration for class
Views views;
// Declartion for member vairables
int hours;
int minutes;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
views = new Views(this);
// pick up the default date using Calender class
Calendar calendar = Calendar.getInstance(Locale.getDefault());
hours = calendar.get(Calendar.HOUR);
minutes = calendar.get(Calendar.MINUTE);
setupTime(hours, minutes);
}
private void setupTime(int hours, int minutes){
// Log.i("TAG", "------------ " + hours + " ");
// Log.i("TAG", "------------ " + minutes + " ");
views.button_time.setText(String.valueOf(hours));
}
class Views{
Button button_date;
Button button_time;
public Views(Activity activity){
button_date = (Button) activity.findViewById(R.id.button_date);
button_time = (Button) activity.findViewById(R.id.button_time);
}
}
}
您正在两次声明button_日期和button_时间,请尝试移除构造函数中的按钮,或等待您的答复。对不起,朋友,我不明白这是什么意思。朋友,我发现了同样的结果。朋友,同样的结果。结果没有变化我已经为你添加了一些解释,我的朋友好吧,猜猜为什么它不起作用?这里也有同样的错误:视图=新视图();应该是视图=新视图();同样的结果。无更改您可能必须传递mainActivity的实例,如视图=新视图(此);公共视图(MainActivity MainActivity){this.button_日期=(button)MainActivity.findViewById(R.id.button_日期);this.button_时间=(button)MainActivity.findViewById(R.id.button_时间);}。。。。。。请使用(按钮)mainActivity.findViewById(R.id.Button_time)的语法进行确认;谢谢你,朋友。我感谢你的帮助。它正在工作。看看这个。。。您必须将MainActivity传递给内部类,因为它具有实际的布局。如何传递?有什么问题吗?朋友,结果没有变化。嗨,朋友,我已经添加了日期、月份和年份。它正在工作,但它给我的是yy/mm/dd格式。请告诉我如何使用dd/mm/yy格式我的朋友我已经添加了日期,但是日期是yy/mm/dd。我想要dd/mm/yy格式的日期。求你了,你能帮帮我吗。以下是我的程序私有void setupDate(int-day,int-month,int-year){views.button_-date.setText(String.valueOf(day)+“/”+String.valueOf(month+1)+“/”+String.valueOf(year));}私有void setupDate(int-year,int-month,int-day){views.button_date.setText(String.valueOf(day)+“/”+String.valueOf(month+1)+“/”+String.valueOf(year))}试试上面的代码,如果你也给出函数调用代码,我可以回答得更正确,代码必须像这个setupDate(day,month,year);
public class MainActivity extends AppCompatActivity
{
//Declaration for class
Views views;
// Declartion for member vairables
int hours;
int minutes;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
views = new Views(this);
// pick up the default date using Calender class
Calendar calendar = Calendar.getInstance(Locale.getDefault());
hours = calendar.get(Calendar.HOUR);
minutes = calendar.get(Calendar.MINUTE);
setupTime(hours, minutes);
}
private void setupTime(int hours, int minutes){
// Log.i("TAG", "------------ " + hours + " ");
// Log.i("TAG", "------------ " + minutes + " ");
views.button_time.setText(String.valueOf(hours));
}
class Views{
Button button_date;
Button button_time;
public Views(Activity activity){
button_date = (Button) activity.findViewById(R.id.button_date);
button_time = (Button) activity.findViewById(R.id.button_time);
}
}
}