2012-06-05 48 views
0

我有一个问题没有被读取 我已经加入名为MYDB资产的数据库文件的数据库文件,但是当我运行我的代码,它说,它没有被定位。它调用这个土司Toast.makeText(这一点, “不接触发现”,Toast.LENGTH_LONG).show();这是因为没有记录被返回而被调用。另外我知道它找到的文件是没有FileNotFoundException异常。这是一个Android应用程序开发书的例子。Android的数据库没有返回的记录,但sqlitebrowser包含数据

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"));  
    } 
} 

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

回答

1

几件事情想到这里...

  1. 因为!f.exists()检查,那么一旦数据库中存在(也许是空的),那么它不会再复制它。因此,也许现在,复制它所有的时间,直到你的工作扭结,然后在!f.exists()

  2. 加我有不同的结果与e.printStackTrace(),也许改变Log.e(TAG, "message", e),看看你开始看到显示了错误logcat的

至于更好的办法......我已经这样做了几种不同的方法...... 1.是创建一个文件(JSON,CVS等),再处理并加载它,如果数据库为空 2.与第一个类似,但创建java序列化对象数组并将其加载到数据库(如果数据库为空)。

此外,我不知道是什么DBAdapter样子,并且因为它包装数据库中的问题可能是在那里。

+0

谢谢,我会试试看。我不认为它的DBAdapter,因为我已经用于其他例子,它运作良好。我刚将数据库文件添加到资产并将其读取时遇到了问题。它上传正常。数据似乎没有被读入光标,所以它可以输出到一个XML布局文件。 – al23dev

+0

但是,被'DBAdapter'打开确切相同的位置'字符串destPath = “/数据/数据/” + getPackageName()+ “/数据库/ MYDB”;'? (在文件名中的相同大小写等)。也许,你正在将资源数据库复制到不同的文件? – stuckless

+0

这是我固定它的表被称为basic_table这没有似乎工作表的名称。所以我删除了不喜欢的内容。我也接受了关于不使用printStackTrace()的建议。另外感谢您提供!if.exists()语句的建议 – al23dev

相关问题