2012-08-25 177 views
2

我從我的SQLite數據庫檢索了一個毫秒String,並且想要將其轉換爲格式化日期String。它基本上工作,但不是當我在數組中嘗試它(見下文)。它拋出一個NumberFormatException。我怎樣才能解決這個問題?將毫秒字符串轉換爲格式化日期SimpleCursorAdapter中的字符串

adapter = new SimpleCursorAdapter(this, R.layout.listrow, cursor, 
     new String[] { getDate(Long.parseLong(Database.KEY_DATE), "dd. MMMM yyyy hh:mm:ss") , Database.KEY_NAME }, 
     new int[] {R.id.text1, R.id.text2}, 0); 

public static String getDate(Long milliSeconds, String dateFormat){ 
SimpleDateFormat formatter = new SimpleDateFormat(dateFormat); 
Calendar calendar = Calendar.getInstance(); 
calendar.setTimeInMillis(milliSeconds); 
return formatter.format(calendar.getTime()); 
} 
+0

@Sam你在嗎? – user1617102

+0

什麼是'Database.KEY_DATE'?我懷疑問題是當你試圖解析它時,儘管所有日曆的東西都是編寫'新日期(毫秒)'的一種很長的方式' –

+0

Database.KEY_DATE檢索一個毫秒的字符串。 – user1617102

回答

8

只有當值從new SimpleCursorAdapter返回後,才能解析出來。這意味着您需要創建自己的SimpleCursorAdapter類型並覆蓋setViewText

事情是這樣的:

adapter = new MySimpleCursorAdapter(this, R.layout.listrow, cursor, 
     new String[] { Database.KEY_DATE , Database.KEY_NAME }, 
     new int[] {R.id.text1, R.id.text2}, 0); 

// ... 

public static String getDate(Long milliSeconds, String dateFormat) { 
    SimpleDateFormat formatter = new SimpleDateFormat(dateFormat); 
    return formatter.format(milliSeconds); 
} 

// In MySimpleCursorAdapter.java: 

public class MySimpleCursorAdapter extends SimpleCursorAdapter { 
    @Override 
    public void setViewText(TextView v, String text) { 
     if (v.getId() == R.id.text1) { // Make sure it matches your time field 
      // You may want to try/catch with NumberFormatException in case `text` is not a numeric value 
      text = WhateverClass.getDate(Long.parseLong(text), "dd. MMMM yyyy hh:mm:ss"); 
     } 
     v.setText(text); 
    } 
} 
+0

它的工作原理。謝謝! – user1617102

相關問題