我在books.sqlpro
中有一个名为src/main/assets
的数据库,其中包含id
,title
,author
和body
列。
我想按字母顺序在数据库中填写ListView和所有作者。
我并不感到惊讶,因为我没有指定我的数据库位置,所以它不起作用,但它唯一的错误是Cannot resolve method 'getReadableDatabase()'
。
这是我的代码:
package com.example.apple.bookshelf;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends AppCompatActivity {
private ListView mainListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mainListView = (ListView) findViewById(R.id.mainListView);
String Table_Name = "books";
String selectQuery = "SELECT * FROM " + Table_Name;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
cursor.moveToFirst();
String[] NameArray = new String[cursor.count()];
ArrayAdapter<String> arrayAdapter =
new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, NameArray);
mainListView.setAdapter(arrayAdapter);
}
}
提前感谢您的帮助!
答案 0 :(得分:0)
使用this.getReadableDatabase()
,因为你发现它不起作用,因为它是SQLiteOpenHelper类的一个方法,你需要一个子类。
以下是获取作者列表的非常粗略的方法。基本上,它将资产文件中的数据库复制到标准数据库位置(如果它尚不存在)。获取所有行的游标,然后在ListView中显示它们。
final String DBNAME = "books.sqlpro";
final String DBPATH = this.getDatabasePath(DBNAME).getPath();
final String TBNAME = "books";
final String AUTHOR_COL = "author";
String outfilename = DBPATH + DBNAME;
SQLiteDatabase booksdb;
try {
booksdb = SQLiteDatabase.openDatabase(outfilename,
null,
SQLiteDatabase.OPEN_READONLY
);
} catch (Exception e) {
try {
InputStream is = this.getAssets().open(DBNAME);
OutputStream os = new FileOutputStream(outfilename);
byte[] buffer = new byte[32768];
int length;
while ((length = is.read(buffer)) > 0) {
os.write(buffer);
}
is.close();
os.flush();
os.close();
} catch (IOException io) {
io.printStackTrace();
}
try {
booksdb = SQLiteDatabase.openDatabase(outfilename,
null,
SQLiteDatabase.OPEN_READONLY
);
} catch (Exception e2) {
e2.printStackTrace();
}
}
Cursor csr = booksdb.query(TBNAME,null,null,null,null,null,null);
String[] authorlist = new String[csr.getCount()];
while (csr.moveToNext()) {
authorlist[csr.getPosition()] = csr.getString(csr.getColumnIndex(AUTHOR_COL));
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
authorlist
);
mListView1.setAdapter(adapter);
由此,在SQLite Manager中创建数据库并将其作为 books.sqlpro 复制到项目的assets文件夹中: -
对此,与作者的列表视图(注意为此劫持了另一个项目,因此其他列表): -