Android javanullpointexception比较日期

Android javanullpointexception比较日期,android,date,Android,Date,所以在我的代码中,我必须用数据填写一张表格,表格中的一个阵营是日期。我制作了一个函数,将该日期与我从另一个类中通过bundle接收的其他两个日期进行比较。此函数还可以查看用户是否引入了新字符,编辑文本是否为空,如果为空,则不显示确认按钮。问题是,当我两次单击确认按钮时,我填写了一个表单,单击它,它工作了,我再次填写,它抛出了一个javalongnull指针异常 我的代码: private TextWatcher myTextWatcher = new TextWatcher() { public

所以在我的代码中,我必须用数据填写一张表格,表格中的一个阵营是日期。我制作了一个函数,将该日期与我从另一个类中通过bundle接收的其他两个日期进行比较。此函数还可以查看用户是否引入了新字符,编辑文本是否为空,如果为空,则不显示确认按钮。问题是,当我两次单击确认按钮时,我填写了一个表单,单击它,它工作了,我再次填写,它抛出了一个javalongnull指针异常

我的代码:

private TextWatcher myTextWatcher = new TextWatcher() {
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {}
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {}

public void afterTextChanged(Editable editable) {
  // invoke the following method here:
restricoes();


}
};

 @SuppressLint("NewApi")
@Override
 public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add_linha);



  //Download JSON file AsyncTask
    new DownloadJSON().execute();



 Intent i = getIntent();
 id2 = i.getStringExtra(TAG_ID);
 data = i.getStringExtra(DATA);
 data2 = i.getStringExtra(DATA2);




 Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+1:00:00"));
 java.util.Date currentLocalTime = cal.getTime();
 SimpleDateFormat time = new SimpleDateFormat("HH:mm:ss"); 
 //you can get seconds by adding  "...:ss" to it
 time.setTimeZone(TimeZone.getTimeZone("GMT+1:00:00")); 
 String hr = time.format(currentLocalTime); 





  /** WebServices */
   inputdtestab= (EditText) findViewById(R.id.editestab);
  inputdata = (EditText) findViewById(R.id.editdata);
  inputhora = (EditText) findViewById(R.id.edithora);
  quantidade = (EditText) findViewById(R.id.editquantidade);

   inputhora.setText(hr);



   inputdtestab.addTextChangedListener(myTextWatcher);
 quantidade.addTextChangedListener(myTextWatcher);
  inputdata.addTextChangedListener(myTextWatcher);



/   / Create button
  Button btnCreateProduct = (Button) findViewById(R.id.button2);

 // button click event
 btnCreateProduct.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View view) {
    // creating new product in background thread
    new CreateNewProduct().execute();
}
});





  change_date=(Button)findViewById(R.id.button1);
 change_date.setOnClickListener(new OnClickListener() {


 @Override
 public void onClick(View v) {
 // TODO Auto-generated method stub
 //triggers the DatePickerDialog
  showDialog(Date_Dialog_ID);
  }
  });



//getting current date
 cDate=Calendar.getInstance();
cDay=cDate.get(Calendar.DAY_OF_MONTH);
 cMonth=cDate.get(Calendar.MONTH);
 cYear=cDate.get(Calendar.YEAR);
  //assigning the edittext with the current date in the beginning
  sDay=cDay;
 sMonth=cMonth;
 sYear=cYear;
 updateDateDisplay(sYear,sMonth,sDay);







   restricoes();




   }




 //restriçoes ver
 private boolean checkEditText(EditText edit) {
return edit.getText().length() == 0;
 }


  public void restricoes()  {
 int x=0;
Button btnCreateProduct = (Button) findViewById(R.id.button2);
 datateste= inputdata.getText().toString();

ntln("How to get here?");
        }
试一试{

问题就在这里,SimpleDataFormat,但我不明白为什么:

 try{

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        java.util.Date date1 = sdf.parse(datateste);
        java.util.Date date2 = sdf.parse(data);
        java.util.Date date3 = sdf.parse(data2);

        System.out.println(sdf.format(date1));
        System.out.println(sdf.format(date2));

        if(date1.compareTo(date2)<0 || date1.compareTo(date3)>0){
            x=1;
        }else{
            System.out.pri
    }catch(ParseException ex){
        ex.printStackTrace();
    }

if(checkEditText(inputdtestab) )
{
inputdtestab.setError("yipikaei");
btnCreateProduct.setVisibility(View.INVISIBLE);

}else if(x==1){

    inputdata.setError("asa");
    btnCreateProduct.setVisibility(View.INVISIBLE);

}
else if(checkEditText(quantidade)){

quantidade.setError("mudfukkerrr");
btnCreateProduct.setVisibility(View.INVISIBLE);

}
else{

     // ==========================================
     // make button visible.
     // use the method "setVisibility", not "setViewVisibility"
     // and "VISIBLE" in "View.VISIBLE" is in full cap:
     btnCreateProduct.setVisibility(View.VISIBLE);
    }

  }
试试看{
SimpleDataFormat sdf=新SimpleDataFormat(“yyyy-MM-dd”);
java.util.Date date1=sdf.parse(datateste);
java.util.Date date2=sdf.parse(数据);
java.util.Date date3=sdf.parse(data2);
System.out.println(sdf.format(date1));
System.out.println(sdf.format(date2));
如果(日期1.与(日期2)0相比){
x=1;
}否则{
System.out.pri
}捕获(解析异常){
例如printStackTrace();
}
if(checkEditText(inputdestab))
{
输入设置错误(“yipikaei”);
btnCreateProduct.setVisibility(视图.不可见);
}else如果(x==1){
inputdata.setError(“asa”);
btnCreateProduct.setVisibility(视图.不可见);
}
else if(checkEditText(quantidade)){
quantidade.setError(“Mudfukkerr”);
btnCreateProduct.setVisibility(视图.不可见);
}
否则{
// ==========================================
//使按钮可见。
//使用方法“setVisibility”,而不是“setViewVisibility”
//而“视图.可见”中的“可见”则为全大写:
btnCreateProduct.setVisibility(View.VISIBLE);
}
}

从异常情况看,
data
data2
似乎为空。您确定意图中包含这些额外内容吗

如果不知道代码的具体功能,很难提出修复建议。如果您只需要避免异常,可以执行以下操作:

java.util.Date date2 = (data != null ? sdf.parse(data) : new Date());
java.util.Date date3 = (data2 != null ? sdf.parse(data2) : new Date());

是的,他们有数据,当我做1s的时候,当我点击按钮时,它不会显示任何错误,但是当我点击导航按钮转到表单活动时,它会告诉我那里的错误NPE只能表示这一点。
getStringExtra()
如果意图没有为该键保留额外的值,则可以返回null。哪一行代码是Newlin_ProductActivity.java的第246行?在该行上调用
parse
就是导致异常的原因。抱歉,现在只看到了它的java.util.date2=sdf.parse(数据);然后,
数据
。调用活动的意图可能是
未设置正确的附加值。您需要纠正该问题(可能是在尚未发布的代码中)或修改逻辑以处理这些附加值的
值(或同时执行这两项操作)。抱歉,当我在按钮上点击1次时,它不会正常工作,并且我system.out.println的值和数据不为空。我在按钮上点击2次,应用程序崩溃,错误再次出现,然后
data
第二次为
null
。(这是假设这确实是生成NPE的行。)
 try{

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        java.util.Date date1 = sdf.parse(datateste);
        java.util.Date date2 = sdf.parse(data);
        java.util.Date date3 = sdf.parse(data2);

        System.out.println(sdf.format(date1));
        System.out.println(sdf.format(date2));

        if(date1.compareTo(date2)<0 || date1.compareTo(date3)>0){
            x=1;
        }else{
            System.out.pri
    }catch(ParseException ex){
        ex.printStackTrace();
    }

if(checkEditText(inputdtestab) )
{
inputdtestab.setError("yipikaei");
btnCreateProduct.setVisibility(View.INVISIBLE);

}else if(x==1){

    inputdata.setError("asa");
    btnCreateProduct.setVisibility(View.INVISIBLE);

}
else if(checkEditText(quantidade)){

quantidade.setError("mudfukkerrr");
btnCreateProduct.setVisibility(View.INVISIBLE);

}
else{

     // ==========================================
     // make button visible.
     // use the method "setVisibility", not "setViewVisibility"
     // and "VISIBLE" in "View.VISIBLE" is in full cap:
     btnCreateProduct.setVisibility(View.VISIBLE);
    }

  }
java.util.Date date2 = (data != null ? sdf.parse(data) : new Date());
java.util.Date date3 = (data2 != null ? sdf.parse(data2) : new Date());