Javascript 不同的日期时间选择器问题

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

在这个程序中,我希望在按钮上显示时间。但它会生成NullpointerException。我试过用Log。它显示在日志中。但是,当开始在按钮上显示时,它会立即显示错误。请问,谁能告诉我这个节目有什么错误吗

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

}