Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java edittext声明为最终版本,settext不起作用_Java_Android_Nullpointerexception_Android Edittext_Settext - Fatal编程技术网

Java edittext声明为最终版本,settext不起作用

Java edittext声明为最终版本,settext不起作用,java,android,nullpointerexception,android-edittext,settext,Java,Android,Nullpointerexception,Android Edittext,Settext,我有很多edittext来显示DatePickerDialog,所以我创建了一个方法,并将edittext作为参数。然后Java说,当从内部类中访问时,参数应该是最终的 但当我运行应用程序时,它在edittext.settext()处停止。我怀疑edittext作为最终版本是问题所在,因为我有另一个代码无法使edittext作为参数运行良好 代码如下: public DatePickerDialog setDateTanggalBeri(final EditText editTangg

我有很多edittext来显示DatePickerDialog,所以我创建了一个方法,并将edittext作为参数。然后Java说,当从内部类中访问时,参数应该是最终的

但当我运行应用程序时,它在edittext.settext()处停止。我怀疑edittext作为最终版本是问题所在,因为我有另一个代码无法使edittext作为参数运行良好

代码如下:

     public DatePickerDialog setDateTanggalBeri(final EditText editTanggal){

    DatePickerDialog datePickTgl;
    Calendar newCalendar = Calendar.getInstance();

    datePickTgl = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
        @RequiresApi(api = Build.VERSION_CODES.N)
        @Override
        public void onDateSet(DatePicker datePicker, int i, int i1, int i2) {
            final Calendar newDate = Calendar.getInstance();
            newDate.set(i,i1,i2);
            editTanggal.setText(dateFormatter.format(newDate.getTime()));
        }
    },newCalendar.get(Calendar.YEAR),newCalendar.get(Calendar.MONTH),newCalendar.get(Calendar.DAY_OF_MONTH));

    return datePickTgl;

}
下面是错误:

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.droid.anindya.jadwalimunisasibayiku, PID: 5669
              java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.EditText.setText(java.lang.CharSequence)' on a null object reference
                  at com.droid.anindya.jadwalimunisasibayiku.Display_Jadwal$1.onDateSet(Display_Jadwal.java:209)
                  at android.app.DatePickerDialog.onClick(DatePickerDialog.java:137)
                  at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:163)
                  at android.os.Handler.dispatchMessage(Handler.java:102)
                  at android.os.Looper.loop(Looper.java:148)
                  at android.app.ActivityThread.main(ActivityThread.java:5417)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
我就是这样实施的:

在onCreate之外声明:

DatePickerDialog DPD1;
DatePickerDialog DPD2;
DatePickerDialog DPD3;
DatePickerDialog DPD4;
DatePickerDialog DPD5; 
DPD1 = setDateTanggalBeri(textTgl1);
DPD2 = setDateTanggalBeri(textTgl2);
DPD3 = setDateTanggalBeri(textTgl3);
DPD4 = setDateTanggalBeri(textTgl4);
DPD5 = setDateTanggalBeri(textTgl5);
....
在onCreate中声明:

DatePickerDialog DPD1;
DatePickerDialog DPD2;
DatePickerDialog DPD3;
DatePickerDialog DPD4;
DatePickerDialog DPD5; 
DPD1 = setDateTanggalBeri(textTgl1);
DPD2 = setDateTanggalBeri(textTgl2);
DPD3 = setDateTanggalBeri(textTgl3);
DPD4 = setDateTanggalBeri(textTgl4);
DPD5 = setDateTanggalBeri(textTgl5);
....
单击时编辑文本:

public void tanggalBeri1Clicked(View view) {
        DPD1.show();
}
public void tanggalBeri2Clicked(View view) {
    DPD2.show();
}

....

既然您说过,
EditText
在同一个
活动中,我建议将其设置为类私有对象

例如:

public class MainActivity extends AppCompatActivity {

    private EditText editTanggal; //declaration

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        ...
        //Initiate the EditText here
        //Example:
        //editTanggal = (EditText) findViewById(R.id.editText);
        ...
    }

    ...

    public DatePickerDialog setDateTanggalBeri() {

        DatePickerDialog datePickTgl;
        Calendar newCalendar = Calendar.getInstance();

        datePickTgl = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
            @RequiresApi(api = Build.VERSION_CODES.N)
            @Override
            public void onDateSet(DatePicker datePicker, int i, int i1, int i2) {
                final Calendar newDate = Calendar.getInstance();
                newDate.set(i, i1, i2);
                editTanggal.setText(dateFormatter.format(newDate.getTime())); //Only use
            }
        }, newCalendar.get(Calendar.YEAR), newCalendar.get(Calendar.MONTH), newCalendar.get(Calendar.DAY_OF_MONTH));

        return datePickTgl;
    }
}
通过这种方式,
EditText
不必是
final
setDateTanggalBeri()
方法也可以以同样的方式工作


我希望它能有所帮助。

最终,我解决了源自nullPointerException文档的问题。谢谢大家,所以我有线索来发现这个问题。之前,我在oncreate之外和方法内部两个位置声明了editText。结果是,方法中的editText重新声明并使其为null,或者其他方法无法访问它

更清楚地说,以下是解决方案之前和之后的内容:

之前:

EditText textTgl1;
EditText textTgl2;
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.table_jadwal);
    ......
    setTanggalBeri()

    DPD1 = setDateTanggalBeri(textTgl1);
    DPD2 = setDateTanggalBeri(textTgl2);
    ....
}
public void setTanggalBeri(){
  EditText textTgl1 = (EditText) findViewById(R.id.editTanggal1);
  EditText textTgl2= (EditText) findViewById(R.id.editTanggal2);
}
之后:

EditText textTgl1;
EditText textTgl2;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.table_jadwal);
    ......
    setTanggalBeri()

    DPD1 = setDateTanggalBeri(textTgl1);
    DPD2 = setDateTanggalBeri(textTgl2);
    ....
}
public void setTanggalBeri(){
    textTgl1 = (EditText) findViewById(R.id.editTanggal1);
    textTgl2 = (EditText) findViewById(R.id.editTanggal2);
 }

函数
setDateTanggalBeri()
与EditText初始化在同一活动或片段中?是的,它在同一活动中。我将EditText初始化放在另一个方法中,并在onCreate中调用它。您能包含错误消息吗?我刚刚包含了它。它说“空对象引用”,我不知道。但是我必须将editText作为一个参数,这样我就可以为多个editText调用该方法。我有30个editText来显示datepickerdialog。我理解您的问题,让我阅读这里的文档来记住,但是如何创建一个扩展editText的类并在其中实现它的方法并使用它,
editTanggal.setDateTanggalBeri()
I添加如何使用该方法