【问题标题】:get cursor data from sqlite into string array从 sqlite 获取光标数据到字符串数组
【发布时间】:2013-03-20 03:24:29
【问题描述】:

新手问题: 下面的两个 sn-ps 都可以从字符串数组或 SQLite 表中的游标工作。 现在,如何将这些值从表中获取到字符串数组中,以便我可以操作它们,然后将它们显示为 lstAdapter?
(在添加大量 cmets 之前,我可以提供完整的源代码,但 14 页 10 pt. 最小页眉页脚)。

我尝试了很多来自这里和其他地方的样品。大多数会产生我没有弄清楚的错误,休息不起作用,所以我错过了一些东西。

这个结构最终将成为我的 WIMM One 应用程序的一部分,因此它需要是 Android 版本 7。

//From my ...ListFragment:
//This works; I get "First", "Second", etc. listed on my screen:
//-----------------------
private SimpleCursorAdapter mAdapter;
private ListAdapter lstAdapter;
. . . 
    Log.d("RemindLF","S onCrt: NEW");
// an array of string items to be displayed        
    String[] strLstitems = new String[] 
             {"first", "Second", "Third", "Fourth"};
//
    lstAdapter = new ArrayAdapter<String>(getActivity(),
            R.layout.reminder_row, R.id.text1, strLstitems);
//
// Call to SetListAdapter()informs ListFragment how to fill ListView
    setListAdapter(lstAdapter);
    getLoaderManager().initLoader(0, null, this);
    Log.d("RemindLF","X onCrt:" + strLstitems[0]);



//This also works; I get the values of one column from each record listed on my screen
//--------------------------
private ArrayAdapter aryAdapter;
. . . 
    Log.d("RemindLF","X onCrt: BASE" ); 
    String[]  strItems =  new String[]  
      { 
       ReminderProvider.COLUMN_BODY
      };
    Log.d("RemindLF","X onCrt:strI:" + strItems[0]);          
    int[] iCnt = new int[]
      {  
       R.id.text1
  };

    mAdapter =  new SimpleCursorAdapter(getActivity(),R.layout.reminder_row,
                null, strItems, iCnt, 0);

    setListAdapter(mAdapter);
getLoaderManager().initLoader(0, null, this);



//Other pieces
//------------
//Loader set-up:
@Override
public Loader<Cursor> onCreateLoader(int ignored, final Bundle args)
   {
    Log.d("RemindLF","S LoadCSR");
    return new CursorLoader(getActivity(), ReminderProvider.CONTENT_URI, null, null, null, null);
   }
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor)
   {
    Log.d("RemindLF","S LoadFin");
    mAdapter.swapCursor(cursor);
   }


REMINDER_LIST.XM:L
<?xml version="1.0" encoding="utf-8"?>
<fragment
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:name="com.dummies.android.taskreminder.ReminderListFragment"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />


REMINDER_ROW.XML:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/text1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:padding="10dip" />

【问题讨论】:

    标签: arrays string simplecursoradapter listadapter


    【解决方案1】:

    我不确定这是否是最好的方法,但您可以随时尝试这样的方法:

    private String[] fromCursorToStringArray(Cursor c){
        String[] result = new String[c.getCount()];
        c.moveToFirst();
        for(int i = 0; i < c.getCount(); i++){
            String row = c.getString(c.getColumnIndex(ReminderProvider.COLUMN_BODY));
            //You can here manipulate a single string as you please
            result[i] = row;
            c.moveToNext();
        }
        return result;
    }
    

    也作为一个 ArrayList:

    private ArrayList<String> fromCursorToArrayListString(Cursor c){
        ArrayList<String> result = new ArrayList<String>();
        c.moveToFirst();
        for(int i = 0; i < c.getCount(); i++){
            String row = c.getString(c.getColumnIndex(ReminderProvider.COLUMN_BODY));
            //You can here manipulate a single string as you please
            result.add(row);     
            c.moveToNext();
        }
        return result;
    }
    

    当然,在使用此方法之后,您将拥有字符串数组(列表)以根据需要进行操作。它应该适用于 API 7,它不使用任何高级调用。

    还有另一种选择,即创建您自己的适配器,扩展 SimpleCursorAdapter 并覆盖 getView() 方法以“即时”修改字符串,但对于这种特殊情况,它对我没有吸引力。

    【讨论】:

    • 感谢您的回复。我最终基本上是这样做的。我的问题是书中的示例使用了在 onCreate 方法中完成的 simplecursoradapter。因此,我从这个站点和其他站点的一个又一个样本尝试了一个又一个样本来访问那里的光标。我所做的任何事情都会产生各种错误,因为我的光标未定义。我终于想到我需要在 onLoadFinished 中完成它,并且一切正常。非常感谢,克拉克
    猜你喜欢
    • 1970-01-01
    • 2013-09-26
    • 2020-11-06
    • 2015-04-18
    • 1970-01-01
    • 2011-10-02
    • 2018-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多