Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在放入ListView之前,尝试创建一个自定义游标适配器,将UnixtTime转换为可读的内容_Android_Sqlite_Custom Cursor - Fatal编程技术网

Android 在放入ListView之前,尝试创建一个自定义游标适配器,将UnixtTime转换为可读的内容

Android 在放入ListView之前,尝试创建一个自定义游标适配器,将UnixtTime转换为可读的内容,android,sqlite,custom-cursor,Android,Sqlite,Custom Cursor,我正在尝试为我正在写的东西制作一个自定义游标适配器。我所做的计划涉及到一个SQLite数据库,其中包含警报发出的日期和时间。(由于SQLite实际上没有DATETIME数据类型,它们在被存储为INT之前都转换为Unix时间。)我发现了制作自定义游标适配器的方法,并尝试对其进行调整,以便它可以接收Unix时间条目并将其转换为人类可读的内容。不过,我遇到了一些障碍。我不确定我所拥有的是否是我所需要的。以下是到目前为止我得到的信息: import java.util.GregorianCalendar

我正在尝试为我正在写的东西制作一个自定义游标适配器。我所做的计划涉及到一个SQLite数据库,其中包含警报发出的日期和时间。(由于SQLite实际上没有DATETIME数据类型,它们在被存储为INT之前都转换为Unix时间。)我发现了制作自定义游标适配器的方法,并尝试对其进行调整,以便它可以接收Unix时间条目并将其转换为人类可读的内容。不过,我遇到了一些障碍。我不确定我所拥有的是否是我所需要的。以下是到目前为止我得到的信息:

import java.util.GregorianCalendar;

import android.content.Context;
import android.database.Cursor;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Filterable;
import android.widget.TextView;

/**
 * @author Dave Smith
 *
 */
public class DateTimeCursorAdapter extends SimpleCursorAdapter implements Filterable {

    private Context context;
    private int layout;

    /**
     * @param context
     * @param layout
     * @param c
     * @param from
     * @param to
     * @param flags
     */
    public DateTimeCursorAdapter(Context context, int layout, Cursor c,
            String[] from, int[] to, int flags) {
        super(context, layout, c, from, to, flags);
        this.context = context;
        this.layout = layout;
    }
    public View newView(Context context, Cursor cursor, ViewGroup parent){
        Cursor c = getCursor();
        final LayoutInflater inflater = LayoutInflater.from(context);
        View v = inflater.inflate(layout, parent, false);
        /*int nameCol = c.getColumnIndexOrThrow("ALARMS.DATETIME");
        String dateTime = c.getString(nameCol);
        dateTime = convertFromUnixTime(Long.parseLong(dateTime)).toString();
        TextView dateTimeText = (TextView) v.findViewById(R.id.dateandtime);
        if (dateTimeText != null){
            dateTimeText.setText(dateTime);
        }*/
        return v;       
    }
    public void bindView(Context context, Cursor c, View v){
        int nameCol = c.getColumnIndexOrThrow("ALARMS.DATETIME");
        String dateTime = c.getString(nameCol);
        dateTime = convertFromUnixTime(Long.parseLong(dateTime)).toString();
        TextView dateTimeText = (TextView) v.findViewById(R.id.dateandtime);
        if (dateTimeText != null){
            dateTimeText.setText(dateTime);
        }
    }
    private GregorianCalendar convertFromUnixTime(long unixTime)
    {
        GregorianCalendar cal = new GregorianCalendar();
    cal.setTimeInMillis(unixTime);
    return cal;
    }

}

这是否允许我从数据库中读入所有UnixTime条目,并以MM/DD/YYYY HH:MM格式(或当前语言环境接受的任何格式)输出它们?

无需自定义适配器。让数据库为您工作

从文档中:

“1.2日期和时间数据类型

SQLite没有为存储日期和/或时间而预留的存储类。相反,SQLite的内置日期和时间函数能够将日期和时间存储为文本、实数或整数值:

文本为ISO8601字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。实数为朱利安日数,根据前公历,公元前4714年11月24日格林威治中午以来的天数。整数为Unix时间,秒数为1970-01-01 00:00 UTC

应用程序可以选择以任何一种格式存储日期和时间,并使用内置的日期和时间功能在格式之间自由转换。“



在日期/时间进入光标之前,使用适当的SQLite函数转换日期/时间。

首先-为什么
c.getString(nameCol)
出现
c.getLong(nameCol)
?并且,考虑偷看,而不是乱哄哄地乱写<代码> GregorianCalendar <代码>——当应用程序关心用户区域设置时总是很好。@ Jens:我的印象是,每一个文本视图中显示的都是一个字符串,因为这是一个CURSOR适配器。另一方面,DateUtils听起来比我自己的转换方法更有意义。是的,但是DateUtils将使用用户的语言环境设置为您正确格式化该字符串。您可以使用unix时间戳并使用DateUtils生成适合该设备的文本表示形式。结果不会被强制转换为特定格式吗?这就是为什么我喜欢DateUtils建议(我认为GregorianCalendar是自动做到的)。这完全取决于你的需要。我不希望添加重复已经存在的代码,但这并不适合每个人的需要。