从数据库查询文本以在TextView中显示但文本不按顺序显示

时间:2013-03-04 08:24:25

标签: android database textview

我从数据库中查询文本(标题)并在TextView中显示它,但是当它显示时,它不是按顺序,但它只显示一个标题,该标题位于标题列的最后一个索引中。

如何全部显示并从头到尾订购?

ImageAdapter

public class ImageAdapter extends BaseAdapter {

    private ArrayList<HashMap<String, String>> MyArr = new ArrayList<HashMap<String,String>>();
    Cursor cursor = dataSource.database.rawQuery("SELECT * FROM "+CafeDbOpenHelper.TABLE_CAFE, null);

    public ImageAdapter(Context c){
        context = c;
    }
    @Override
    public int getCount() {
        return cursor.getCount();           
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View converView, ViewGroup parent) {
        ViewHolder viewHolder = new ViewHolder();
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if(converView == null){
            converView = inflater.inflate(R.layout.grid_item, null);
        }
        viewHolder.imageview = (ImageView) converView.findViewById(R.id.imv_card_cafe);
        viewHolder.txtTitle = (TextView) converView.findViewById(R.id.txt_title);


        while (cursor.moveToNext()) {
            Log.i("db", " return "+cursor.getString(cursor.getColumnIndex(TAG_CAFE_TITLE)));
                viewHolder.txtTitle.setText(cursor.getString(cursor.getColumnIndex(TAG_CAFE_TITLE)));
        }


        String imagePath = Environment.getExternalStorageDirectory().toString()+"/downloadedfile.png";   
        viewHolder.imageview.setImageResource(mThumb[position]);

        return converView;
    }
}

Logcat数据库标记是数据库中的文本

03-04 14:44:00.411: D/AbsListView(22842): Get MotionRecognitionManager
03-04 14:44:00.426: I/ACTION(22842): Database is open
03-04 14:44:00.442: I/number(22842): return11 rows
03-04 14:44:00.450: I/ACTION(22842): Database is open
03-04 14:44:00.504: I/db(22842):  return Kiriya Café
03-04 14:44:00.504: I/db(22842):  return Brown Coffee and Bakery
03-04 14:44:00.504: I/db(22842):  return The Blue Pumpkin - Riverside
03-04 14:44:00.504: I/db(22842):  return Black Canyon Coffee
03-04 14:44:00.559: D/libEGL(22842): loaded /vendor/lib/egl/libEGL_POWERVR_SGX540_120.so
03-04 14:44:00.575: D/libEGL(22842): loaded /vendor/lib/egl/libGLESv1_CM_POWERVR_SGX540_120.so
03-04 14:44:00.575: D/libEGL(22842): loaded /vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so
03-04 14:44:00.684: D/OpenGLRenderer(22842): Enabling debug mode 0
03-04 14:45:35.348: I/ACTION(22842): Database is close

图像

enter image description here

1 个答案:

答案 0 :(得分:0)

关于标题的顺序,您只需修改您的选择查询,以便它检索已订购的行:

"SELECT * FROM "+CafeDbOpenHelper.TABLE_CAFE + " ORDER BY YOUR_COLUMN_TITLE", null

现在为什么只显示一个textview,它与你编写逻辑的方式有关:

viewHolder.txtTitle = (TextView) converView.findViewById(R.id.txt_title);


while (cursor.moveToNext()) {
      Log.i("db", " return "+cursor.getString(cursor.getColumnIndex(TAG_CAFE_TITLE)));
      viewHolder.txtTitle.setText(cursor.getString(cursor.getColumnIndex(TAG_CAFE_TITLE)));
}

您基本上是在该循环中修改相同的textview四次,因此它自然会设置为您从数据库中检索到的最后一个(恰好是Black Canyon Coffee)

您需要1)动态创建textview并将其添加到现有视图中或2)创建放置在布局中的四个textview并在while循环中正确设置它们。

编辑:一般来说,你会想要使用选项#1,因为当你使用不断变化的数据库(以及为了便于将来修改)时,它无疑是最明智的方法。但是,如果您在项目规范中绝对肯定您将在表中拥有固定数量的行(例如,您的应用程序中只能有四个咖啡馆,并且您只会交换表以加载不同的名称)然后快速而肮脏的方法是制作四个文本视图并通过迭代来适当地设置每个文本视图。

这个答案主要是出于猜测,因为你没有告诉我们你打算如何使用/操纵数据库,所以这完全取决于你的判断。