ウェブサイトからデータベースをダウンロードしています。ダウンロードしたデータベースが呼び出さdb.php
れ、 data/data/my.package.name/files という名前で保存されますFishingMatey.db
。データベースは DDMS のファイル システムにあり、PC の SQLite Studio で開くことができます。私のデータベースは、適切なテーブルと適切なデータで満たされています。SQLite データベースをダウンロードするコードは次のとおりです。
public boolean downloadDatabase() {
try {
// Log.d(TAG, "downloading database");
URL url = new URL("http://myurl.com/db.php");
// Open a connection to that URL */
URLConnection ucon = url.openConnection();
// Define InputStreams to read from the URLConnection
InputStream is = ucon.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
// Read bytes to the Buffer until there is nothing more to read(-1)
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
// Convert the Bytes read to a String
FileOutputStream fos = null;
// Select storage location
fos = this.context.openFileOutput(DATABASE_NAME, Context.MODE_PRIVATE);
fos.write(baf.toByteArray());
fos.close();
} catch (IOException e) {
Log.e("downloadDatabase", "downloadDatabase Error: ", e);
return false;
} catch (NullPointerException e) {
Log.e("downloadDatabase", "downloadDatabase Error: ", e);
return false;
} catch (Exception e) {
Log.e("downloadDatabase", "downloadDatabase Error: ", e);
return false;
}
return true;
}
私の問題: でデータベースを開くことができますが
SQLiteDatabase db = SQLiteDatabase.openDatabase("/data/data/com.example.menuswitcher/files/" + DATABASE_NAME, null, SQLiteDatabase.OPEN_READONLY);
、入力するdb.query(DATABASE_TABLE_Bewirtschafter, null, null, null, null, null, null);
と次のエラーが表示されます。
01-08 19:52:22.366: E/AndroidRuntime(6157): FATAL EXCEPTION: main
01-08 19:52:22.366: E/AndroidRuntime(6157): android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
アクティビティで呼び出す方法は次のとおりです: this.b3.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
DBAccess dbAccess = new DBAccess(HauptmenueActivity.this, 1, "FishingMatey.db");
if (dbAccess.downloadDatabase()) {
dbAccess.initDatabase();
Cursor cur = dbAccess.createBewirtschafterAllCursor();
Log.v("b3", cur.getString(cur.getColumnIndex("name")));
} else {
Log.e("b3", "Error!");
}
}
});
これが機能しない理由を誰かが知っていますか?