android数据库不返回任何记录,但sqlitebrowser包含数据

android数据库不返回任何记录,但sqlitebrowser包含数据,android,sqlite,android-assets,Android,Sqlite,Android Assets,我有一个数据库文件无法读取的问题 我已经在名为mydb的资产中添加了数据库文件,但当我运行代码时,它会说找不到该文件。它称此为toast.makeText(此“未找到联系人”,toast.LENGTH_LONG.show();正在调用此函数,因为没有返回任何记录。我还知道它正在查找文件,因为没有FileNotFoundException异常。这是一本关于Android应用程序开发的书 public class DatabaseActivity extends Activity { /**

我有一个数据库文件无法读取的问题 我已经在名为mydb的资产中添加了数据库文件,但当我运行代码时,它会说找不到该文件。它称此为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"));    
    } 
}

有没有更好的上传数据的方法。

这里我想到了几件事

  • 因为
    !f、 exists()
    check,那么一旦数据库存在(可能是空的),它就再也不会复制它了。所以,也许现在,一直复制它,直到你解决了纠结,然后加入
    !f、 exists()

  • 我对
    e.printStackTrace()
    的结果好坏参半,可能会改为
    Log.e(标记“message”,e)
    ,看看是否开始在LogCat中看到错误

  • 至于更好的方法。。。我用了两种不同的方法。。。 1.是创建一个文件(json、cvs等),然后处理并加载它(如果数据库为空) 2.与第一个类似,只是我创建了一个java序列化对象数组,并在数据库为空时将其加载到数据库中


    另外,我不知道DBAdapter是什么样子,因为它包装了数据库,所以可能存在问题。

    谢谢,我会尝试一下。我不认为它是DBAdapter,因为我已经在其他示例中使用了它,而且它工作得很好。我刚刚在将db文件添加到资产和读取它时遇到问题。它上传的很好。数据似乎没有读入游标,因此可以输出到xml布局文件。但是,
    DBAdapter
    打开的位置是否与
    String destPath=“/data/data/”+getPackageName()+“/databases/MyDB”打开的位置完全相同?(文件名中的大小写也一样,等等)。也许,您正在将资源数据库复制到另一个文件?这是我修复的表的名称。该表名为basic_table,但似乎不起作用。所以我去掉了不死分数。我还接受了您关于不使用printStackTrace()的建议。同时也感谢您的建议!if.exists()语句