如何更改从数据库中获取的数据?

时间:2011-03-17 18:25:50

标签: java android sqlite

我使用以下代码从我的数据库中获取数据:

private void fillData() {
        cursor = mDbAdapter.fetchAllSubjects();
        startManagingCursor(cursor);

        String[] from = new String[] { DatabaseAdapter.KEY_TITLE, DatabaseAdapter.KEY_LECTURER, DatabaseAdapter.KEY_BEGIN };
        int[] to = new int[] { R.id.title, R.id.lecturer, R.id.time };

        // Now create an array adapter and set it to display using our row
        SimpleCursorAdapter subjects = new SimpleCursorAdapter(this, R.layout.subject_row, cursor, from, to);

        setListAdapter(subjects);
    }

现在我的问题是,我想从我的数据库中添加3个其他列,并希望获得以下内容:

  • “(”+ DatabaseAdapter.KEY_TYPE +“)”+ DatabaseAdapter.KEY_TITLE
  • DatabaseAdapter.KEY_LECTURER
  • 新日期(DatabaseAdapter.KEY_BEGIN)
  • 新日期(DatabaseAdapter.KEY_END) - >这两个应该在dd.MM中的一个TextView中。 HH:mm(这是从BEGIN开始) - HH:mm(这是从END开始)

我不知道我怎么能这样做 - 请帮助我:)。

1 个答案:

答案 0 :(得分:0)

好的,我终于找到了你真正想要的东西。

您可以创建自己的Cursor适配器,而不是直接使用“SimpleCursorAdapter”,您可以在其中根据需要对数据进行主处理。 创建一个新的适配器“SubjectsAdapter.java”。在此适配器中,您将覆盖“bindView”和“newView”。这允许我们将视图应用于光标。但在此之前,我们有机会从光标更改数据。

这会让你知道必须做些什么。

    private void fillData() 
    {
        cursor = mDbAdapter.fetchAllSubjects();
        startManagingCursor(cursor);


        SubjectsAdapter subjectsAdapter = new SubjectsAdapter(this, cursor);
        setListAdapter(subjectsAdapter);
    }


//SubjectsAdapter.java - make changes to fix bugs/compilation errors. This is untested.
public class SubjectsAdapter extends ResourceCursorAdapter 
{
    public SubjectsAdapter(Context context, Cursor cur) {
        super(context, R.layout.subject_row, cur);
    }

    @Override
    public View newView(Context context, Cursor cur, ViewGroup parent) 
    {
         LayoutInflater li = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
         return li.inflate(R.layout.subject_row, parent, false);
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) 
    {           
        TextView titleText = (TextView)view.findViewById(R.id.title);
          titleText.setText(cursor.getString(cursor.getColumnIndex(DatabaseAdapter.KEY_TITLE)));

        //You can add code to retrieve other columns here.

        //This is where you retrieve the date in long format from cursor, convert it to a required format, and then using it.
        TextView beginTimeText = (TextView)view.findViewById(R.id.time);            
        Long lBeginDate = cursor.getLong(cursor.getColumnIndex(DatabaseAdapter.KEY_BEGIN));
        String sBeginDate = getFormattedDate(lBeginDate);           
        beginTimeText.setText(sBeginDate);
   }

    private String getFormattedDate(Long lDate)
    {
         SimpleDateFormat smdf = new SimpleDateFormat("MM/dd/yyyy h:mm:ss a");       
        String sDate = smdf.format( lDate ));
        return sDate;
    }
}