引起:java.lang.NullPointerException:尝试在Android中的空对象引用上调用虚方法'long java.util.Date.getTime()'

时间:2016-02-01 06:41:38

标签: android datetime-format

我想将 strSqliteDate:= 2016-01-14 05:34:50 PM 转换为 2016-01-14 。转换所有日期后我的应用程序崩溃了并得到

的错误
02-01 12:03:15.204    7619-7619/com.example.tazeen.classnkk W/System.err﹕ java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
02-01 12:03:15.204    7619-7619/com.example.tazeen.classnkk W/System.err﹕ at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1035)
02-01 12:03:15.204    7619-7619/com.example.tazeen.classnkk W/System.err﹕ at java.text.DateFormat.parse(DateFormat.java:577)

在此行date = dateFormat.parse(strSqliteDate);

并在此line = calendar.setTime(date);

第二次收到错误
  

引起:java.lang.NullPointerException:尝试调用虚拟   null对象引用上的方法'long java.util.Date.getTime()'               在java.util.Calendar.setTime(Calendar.java:1195)

这是DBhelper类中的日期转换代码

String strSqliteDate = cursor.getString(cursor.getColumnIndex("ActionDate"));
                Log.e(" strSqliteDate "," = " + strSqliteDate);

                String result = "";
                Date date = null;
                DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
                try
                {
                     date = dateFormat.parse(strSqliteDate);
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
                Calendar calendar = Calendar.getInstance();
                calendar.setTime(date);
                SimpleDateFormat printFormat = new SimpleDateFormat("yyyy-MM-dd");
                result = printFormat.format(calendar.getTime());
                Log.e("result = ","==========>"+result);

5 个答案:

答案 0 :(得分:5)

使用前变量strSqliteDate检查它是否为空?

String strSqliteDate = cursor.getString(cursor.getColumnIndex("ActionDate"));
if(strSqliteDate != null && !strSqliteDate .isEmpty())
{

  Log.e(" strSqliteDate "," = " + strSqliteDate);

            String result = "";
            Date date = null;
            DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
            try
            {
                 date = dateFormat.parse(strSqliteDate);
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            SimpleDateFormat printFormat = new SimpleDateFormat("yyyy-MM-dd");
            result = printFormat.format(calendar.getTime());
            Log.e("result = ","==========>"+result);
}

答案 1 :(得分:1)

  

引起:java.lang.NullPointerException:尝试调用虚拟   方法' long java.util.Date.getTime()'在null对象引用   java.util.Calendar.setTime(Calendar.java:1195)

根据您的问题,您应该使用substring()&请检查数据库是否为null

  

此方法有两个变体,并返回一个新的字符串,即a   这个字符串的子串。子字符串以字符at开头   指定的索引并延伸到此字符串的末尾或最多   endIndex - 如果给出第二个参数,则为1。

.substring(startIndex, endIndex); 
  

strSqliteDate = 2016-01-14 05:34:50 PM

     

System.out.println(strSqliteDate.substring(0,11));

答案 2 :(得分:0)

使用 subString 方法引用Refers link

strSqliteDate.subString(0,10)

Output will be==>> 2016-01-14 

答案 3 :(得分:0)

您的date = dateFormat.parse(strSqliteDate); strSqliteDate null 这就是你获得NPE的原因

答案 4 :(得分:0)

在第

result = printFormat.format(calendar.getTime());

formate()的参数中传递日期类的引用。