我遇到了无法读取数据库文件的问题 我在名为mydb的资产中添加了数据库文件,但是当我运行我的代码时,它说它没有被找到。它正在调用这个toast Toast.makeText(这个,“找不到联系人”,Toast.LENGTH_LONG).show();这是被调用的,因为没有返回任何记录。另外我知道它找到了文件,因为没有FileNotFoundException异常。这是Android应用程序开发书的一个示例。
public class DatabaseActivity extends Activity {
/** Called when the activity is first created. */
TextView quest, response1, response2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView quest = (TextView) findViewById(R.id.quest);
try {
String destPath = "/data/data/" + getPackageName() + "/databases/MyDB";
File f = new File(destPath);
if (!f.exists()) {
CopyDB( getBaseContext().getAssets().open("mydb"),
new FileOutputStream(destPath));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
DBAdapter db = new DBAdapter(this);
//---get a contact---
db.open();
Cursor c = db.getContact(2);
if (c.moveToFirst())
DisplayContact(c);
else
Toast.makeText(this, "No contact found", Toast.LENGTH_LONG).show();
db.close();
}
public void CopyDB(InputStream inputStream, OutputStream outputStream)
throws IOException {
//---copy 1K bytes at a time---
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}
inputStream.close();
outputStream.close();
}
public void DisplayContact(Cursor c)
{
quest.setText(String.valueOf(c.getString(1)));
//quest.setText(String.valueOf("this is a text string"));
}
}
是否有更好的上传数据的方法。
答案 0 :(得分:1)
这里有几件事情想到......
因为!f.exists()
检查,一旦数据库存在(并且可能为空),那么它将永远不会再次复制它。所以也许现在,一直复制它,直到你弄出扭结然后加入!f.exists()
我的e.printStackTrace()
结果好坏参半,可能会更改为Log.e(TAG, "message", e)
,看看你是否开始看到LogCat中出现的错误
至于更好的方式......我已经通过几种不同的方式做到了这一点...... 1.如果数据库为空,则创建一个文件(json,cvs等),然后处理并加载它 2.与第一个类似,除了我创建一个java序列化对象数组并将其加载到数据库,如果数据库为空。
此外,我不知道DBAdapter
的样子,因为它包装了数据库,问题就在那里。