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