【发布时间】:2012-09-17 11:04:29
【问题描述】:
我有一个应用程序正在检索从 1970 年开始以毫秒为单位存储为字符串的日期,例如 1324657734883。
我有一个ListView 显示这个日期。我想在数据库的这个字段中显示 joda DateTime。我的视图显示列表视图并使用startManagingCursor() 填充它,所以我认为在填充到listview 之前没有任何方法可以将milisec 格式转换为DateTime。
有没有办法解决这个问题,还是我必须存储一个 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);
}
}
.
[更新1] 公共类 ViewTransactions 扩展 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;
}
}
}
【问题讨论】:
-
有一种解决方法,但您需要为此使用自己的适配器。
-
@aleks G 嗨,好的,那是使用自定义适配器之类的东西吗?你愿意给出答案,我会接受吗?
-
@turtleboy 看看答案。我还没有测试过,所以你可能需要稍微调整一下,但你应该明白了。
-
@AleksG 嗨,是的,我已经解决了,我已经用修改后的代码更新了帖子,但我的列表视图现在是空的。你有什么想法为什么。我按照你的建议实施了吗?
标签: android sqlite datetime android-listview