2012-09-17 60 views
0

我有一个应用程序检索存储为一个字符串的日期从1970年开始毫秒,例如1324657734883存储/检索日期时间

我有一个ListView显示此日期asis。我想在数据库中显示来自此字段的joda DateTime。我的视图显示列表视图,并使用startManagingCursor()填充它,所以我不认为有任何方法将milisec格式转换为DateTime,然后将其填充到listview

有没有办法解决这个问题,还是我必须存储一个DateTime,如果是的话,我需要声明什么样的列类型来存储这种类型的数据?

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    nfcscannerapplication = (NfcScannerApplication) getApplication(); 

    // setup UI 
    setContentView(R.layout.viewtransactions); 
    setTitle(getCarername() + " has completed " + nfcscannerapplication.loginValidate.getNumberOfTransactions() + " visits today"); 
    //transactionCount = (TextView)findViewById(R.id.textviewtransactionsfordaycount); 
    viewTransactions = (ListView) findViewById(R.id.listviewtransactions); 

    //transactionCount.setText("You have completed 6 transactions today"); 

    // get data 
    cursor = nfcscannerapplication.loginValidate.queryAllFromTransactions(); 
    startManagingCursor(cursor); 

    // setup adapter and show the data 




    String[] from = { 
      LoginValidate.C_NAME, LoginValidate.C_TAG_SCAN_TIME, 
      LoginValidate.C_TAG_SCAN_TIME}; 
    int[] to = { R.id.rowcarername, R.id.rowsignedinoutstatus, R.id.rowsenttoserverat }; 

    adapter = new SimpleCursorAdapter(nfcscannerapplication, R.layout.rowdataactual, 
      cursor, from, to); 
    viewTransactions.setAdapter(adapter); 


} 

} 

[UPDATE1] 公共类ViewTransactions从android.Text.DateFormat

public static CharSequence getTimeStamp(long milliseconds) { 
    Date d = new Date(milliseconds); 
    return DateFormat.format("EEEE, MMMM dd, yyyy h:mm:ss aa", d); 
} 

延伸NfcBaseActivity {

private static final String TAG = ViewTransactions.class.getSimpleName(); 

NfcScannerApplication nfcscannerapplication; 
Cursor cursor; 
ListView viewTransactions; 
SimpleCursorAdapter adapter; 
MyAdapter myAdapter; 
//TextView transactionCount; //now written to status bar 

@SuppressWarnings("deprecation") 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    nfcscannerapplication = (NfcScannerApplication) getApplication(); 

    // setup UI 
    setContentView(R.layout.viewtransactions); 
    setTitle(getCarername() + " has completed " + nfcscannerapplication.loginValidate.getNumberOfTransactions() + " visits today"); 
    //transactionCount = (TextView)findViewById(R.id.textviewtransactionsfordaycount); 
    viewTransactions = (ListView) findViewById(R.id.listviewtransactions); 

    //transactionCount.setText("You have completed 6 transactions today"); 

    // get data 
    cursor = nfcscannerapplication.loginValidate.queryAllFromTransactions(); 
    startManagingCursor(cursor); 

    // setup adapter and show the data 




    String[] from = { 
      LoginValidate.C_NAME, LoginValidate.C_TAG_SCAN_TIME, 
      LoginValidate.C_TAG_SCAN_TIME}; 
    int[] to = { R.id.rowcarername, R.id.rowsignedinoutstatus, R.id.rowsenttoserverat }; 

    myAdapter = new MyAdapter(nfcscannerapplication, R.layout.rowdataactual, 
      cursor, from, to); 
    viewTransactions.setAdapter(adapter); 


} 


class MyAdapter extends SimpleCursorAdapter { 

    public MyAdapter(Context context, int layout, Cursor c, String[] from, 
      int[] to) { 
     super(context, layout, c, from, to); 
    } 

    @Override 
    public 
    View getView(int position, View convertView, ViewGroup parent) { 
     View v = super.getView(position, convertView, parent); 
     if(v == null) 
      return null; 

     Cursor c = (Cursor)getItem(position); 
     String val = c.getString(c.getColumnIndex(LoginValidate.C_TAG_SCAN_TIME)); 
     Date dt = new Date(Long.parseLong(val)); 
     SimpleDateFormat df = new SimpleDateFormat("dd MMMM yyyy"); 
     String res = df.format(dt); 

     ((TextView)v.findViewById(R.id.rowsignedinoutstatus)).setText(res); 
     ((TextView)v.findViewById(R.id.rowsenttoserverat)).setText(res); 

     return v; 
    } 
} 

} 
+0

有办法解决它,但你需要用你的自己的适配器。 –

+0

@aleks G嗨,好的是,使用类似自定义适配器的东西?你想回答,我会接受吗? – turtleboy

+0

试试这个 - http://stackoverflow.com/questions/8166497/custom-adaptor-for-list-view –

回答

2

创建一个扩展SimpleCursorAdapter自定义适配器:

class MyAdapter extends SimpleCursorAdapter { 
    @Override 
    View getView(int position, View convertView, ViewGroup parent) { 
     View v = super.getView(); 
     if(v == null) 
      return null; 

     Cursor c = (Cursor)getItem(position); 
     String val = c.getString(c.getColumnIndex(LoginValidate.C_TAG_SCAN_TIME)); 
     Date dt = new Date(Long.parseLong(val)); 
     SimpleDateFormat df = new SimpleDateFormat("dd MMMM yyyy"); 
     String res = df.format(val); 

     ((TextView)v.findViewById(R.id.rowsignedinoutstatus)).setText(res); 
     ((TextView)v.findViewById(R.id.rowsenttoserverat)).setText(res); 

     return v; 
    } 
} 

然后用它代替默认之一:

adapter = new MyAdapter(nfcscannerapplication, R.layout.rowdataactual, cursor, from, to); 
+0

谢谢,它应该返回一个字符串? – turtleboy

+0

@turtleboy哦,对不起,当然不是;它应该返回视图。我已经更新了答案。 –

+0

我忘了将新的自定义适配器设置为列表视图。该列表视图仍然通过旧的适配器。它很好地工作,非常感谢。 – turtleboy

0

使用DateFormat但是,你将不得不使用ArrayAdapter<String>ListView

如果您使用LoaderManager而不是管理您的活动中的游标,这将很容易。