Java 从数据库中获取文件名并使用它填充ImageView

Java 从数据库中获取文件名并使用它填充ImageView,java,android,database,sqlite,Java,Android,Database,Sqlite,我正在创建一个应用程序,此时需要从sqlite数据库获取文件名,获取具有该文件名的图像并将其插入ImageView,我现在已经创建了此代码,但我认为我在这里做的一切都错了 Database db = new Database(getApplicationContext()); SQLiteDatabase readableDatabase = db.getReadableDatabase(); final Cursor curFileName = readableDatabase.rawQuer

我正在创建一个应用程序,此时需要从sqlite数据库获取文件名,获取具有该文件名的图像并将其插入ImageView,我现在已经创建了此代码,但我认为我在这里做的一切都错了

Database db = new Database(getApplicationContext());
SQLiteDatabase readableDatabase = db.getReadableDatabase();
final Cursor curFileName = readableDatabase.rawQuery("select filename from data order by id asc", null);
image = (ImageView) findViewById(R.id.image);
int filename = curFileName.getColumnIndex("filename");
String filenameString = curFileName.getString(filename);
d = Drawable.createFromPath(Environment.getExternalStorageDirectory().toString()+filenameString);
Toast.makeText(getApplicationContext(), filenameString, Toast.LENGTH_SHORT).show();
handleDrawable(d);
是的,对不起,这是例外:

04-09 13:48:16.950: E/AndroidRuntime(30802): FATAL EXCEPTION: main
04-09 13:48:16.950: E/AndroidRuntime(30802): java.lang.RuntimeException: Unable to start activity ComponentInfo{g.d.filer/g.d.filer.Favorites}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 33

我编辑了我的答案。我希望这将有助于我们:D

if (cursor.moveToFirst()){
   do{
      String data = cursor.getString(cursor.getColumnIndex("filename"));
      // here you have to generate Image view and add bitmap to imageview
   }while(cursor.moveToNext());
}
cursor.close()
你加了吗

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


在清单文件中。 因为,从Android 4.4开始,如果您只读取或写入应用程序专用的文件,则不需要这些权限。有关详细信息,请参阅


必须先定位光标,然后才能阅读

 int filename = curFileName.getColumnIndex("filename");
 if (cur.moveToFirst()) { // position cursor to first item. false: empty resultset
     String filenameString = curFileName.getString(filename);
     d = Drawable.createFromPath(Environment.getExternalStorageDirectory().toString()+filenameString);
     Toast.makeText(getApplicationContext(), filenameString, Toast.LENGTH_SHORT).show();
     handleDrawable(d);
     ...
 }

你有什么例外吗?您是否授予从外部存储器读取文件的权限?我不认为我创建图像的方式有任何问题,实际上它给了我一个与您的ColumnIndex(“文件名”)的游标检查相关的错误。你的表格中有文件名吗?我是新手,但如果我没有错的话,我放“文件名”的地方应该有正确的列名?当我创建数据库时(创建和填充都没有问题),我已经创建了一个具有该名称的列
 int filename = curFileName.getColumnIndex("filename");
 if (cur.moveToFirst()) { // position cursor to first item. false: empty resultset
     String filenameString = curFileName.getString(filename);
     d = Drawable.createFromPath(Environment.getExternalStorageDirectory().toString()+filenameString);
     Toast.makeText(getApplicationContext(), filenameString, Toast.LENGTH_SHORT).show();
     handleDrawable(d);
     ...
 }