2015-05-15 23 views
-6

解析字符串到日期时,我得到空指针异常。我正在使用simpledateformat进行解析。 请参阅下面的代码,并帮助我。解析字符串到目前为止的空指针异常

错误在下面线

日期dateFROM = formatter.parse(from2);

代码 MainDatabaseHandler.java

`public List<String> getTimeSlotATT(String text2, String from2) { 
     // TODO Auto-generated method stub 
     List<String> list = new ArrayList<String>(); 
      SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy"); 
      String selectQuery = "SELECT * FROM "+ TABLE_LABELS + " WHERE "+ KEY_NAME + " ='"+text2+"' AND "+FROM_DATE+"='"+from2+"'"; 
      String selectQuery1 = "SELECT * FROM "+ TABLE_LABELS + " WHERE "+ KEY_NAME + " ='"+text2+"'"; 
      SQLiteDatabase db = this.getReadableDatabase(); 
      Cursor cursor = db.rawQuery(selectQuery, null);//selectQuery,selectedArguments 
      Cursor cursor1 = db.rawQuery(selectQuery1, null); 
      // looping through all rows and adding to list 
      if (cursor.moveToFirst()) { 
       do { 

        if(cursor.getString(6)==null){ 
         list.add(null); 
        } 
        else if(cursor.getString(6)=="FULL DAY"){ 
         list.add(cursor.getString(6)); 
        } 
        else { 
         list.add(cursor.getString(6)); 
        } 

       } while (cursor.moveToNext()); 
      } 

      if (cursor1.moveToFirst()) { 
       do { 
         try { 

         Date dateFROM = formatter.parse(from2); 
         Date dateDB = formatter.parse(cursor1.getString(4)); 
         Date dateDB1 = formatter.parse(cursor1.getString(5)); 


         if(dateDB.after(dateFROM)){ 
         } 
         else if(dateDB.before(dateFROM)){ 

          if(dateDB1.equals(dateFROM)||dateDB1.after(dateFROM)){ 
           list.add(cursor1.getString(6)); 
          } 
          else if(dateDB1.before(dateFROM)){ 
          } 
         } 

        } catch (ParseException e) { 
         e.printStackTrace(); 
        }     
       } while (cursor1.moveToNext()); 
      } 
      // closing connection 
      cursor.close(); 
      db.close(); 

      // returning lables 
      return list; 
    }` 

logcat的错误

`java.lang.NullPointerException 
at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1009) 
at java.text.DateFormat.parse(DateFormat.java:553) 
at avi.MainDatabaseHandler.getIimeSlotAII(MainDatabase 45 
Handler.java:580) 
at avi.book_setup_usr.loadIimeSpinnerDataAII(book_setu 45 
p_usr.java:460) 
at avi.book_setup_usr.access$1(book_setup_usr.java:448 45 
at avi.book_setup_usr$8.onClick(book_setup_usr.javaz77 45 
7) 
at com.android.internal.app.AlertControl1er$ButtonHand1er.handleMe 45 
ssage(AlertController.java:166) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:136) 
at android.app.ActivityThread.main(ActivityThread.java:5017) 
at java.lang.ref1ect.Method.invokeNative(Native Method) 
at java.lang.ref1ect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(Zygo 45 
teInit.java:779) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
at dalvik.system.NativeStart.main(Native Method)` 
+0

在其中的三行的格式,你所得到的空指针的? –

+1

确保从数据库获取的数据不是'null',并且String'from2'不是'null'。 –

+0

全部三个 日期dateFROM = formatter.parse(from2); 日期dateDB = formatter.parse(cursor1.getString(4)); 日期dateDB1 = formatter.parse(cursor1.getString(5)); @RakeshKR但在字符串from2我从datepicker对话框中获取数据。 –

回答

0

首先确保from2null和数据从数据库得到的是不null

下列新增的成功和失败的案例,

String   from2   = "01-12-2015"; 
SimpleDateFormat simpleDateFromat = new SimpleDateFormat("dd-MM-yyyy"); 
Date dateFROM      = simpleDateFromat.parse(from2); 
System.out.println("dateFROM : "+dateFROM); 

在这里,你会得到正确的日期为:Tue Dec 01 00:00:00 IST 2015

from2 = "2015-12-01"; 
dateFROM = simpleDateFromat.parse(from2); 
System.out.println("dateFROM : "+dateFROM); 

这里,因为日期的不正确格式解析它作为: Tue Jun 07 00:00:00 IST 7

from2 = ""; 
dateFROM = simpleDateFromat.parse(from2); 
System.out.println("dateFROM : "+dateFROM); 

这里您将获得一个java.text.ParseException: Unparseable date: ""

from2 = null; 
dateFROM = simpleDateFromat.parse(from2); 
System.out.println("dateFROM : "+dateFROM); 

在这里,你会得到一个java.lang.NullPointerException

1

正如有人评论说,from2已经为空,或者也许它的格式不especified相同SimpleDateFormat对象。一探究竟。

SimpleDateFormat.parse(String text, ParsePosition pos)提取:

返回: 从字符串解析的日期。在发生错误的情况下,返回null。

抛出:NullPointerException - 如果text或pos为null。