0

データベース ファイルが読み取られないという問題があります。データベース ファイルを mydb というアセットに追加しましたが、コードを実行すると、見つからないと表示されます。このトーストを呼び出しています Toast.makeText(this, "No contact found", 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"));    
    } 
}

データをアップロードするより良い方法はありますか。

4

1 に答える 1

1

ここでいくつかのことが頭に浮かびます...

  1. チェックのため!f.exists()、データベースが存在する(そしておそらく空である)と、データベースは二度とコピーされません。だから多分今のところ、あなたがねじれを解決してから追加するまで、それを常にコピーしてください!f.exists()

  2. 私はと混合した結果を持っていますe.printStackTrace()、多分に変更しLog.e(TAG, "message", e)て、LogCatにエラーが表示され始めるかどうかを確認してください

より良い方法として...私はこれをいくつかの異なる方法で行いました...1。ファイル(json、cvsなど)を作成し、データベースが空の場合はそれを処理してロードします2. 1つ目は、データベースが空の場合に、Javaシリアル化オブジェクト配列を作成してデータベースにロードすることを除いてです。

また、どのように見えるかわかりませんDBAdapter。データベースをラップしているため、問題が発生している可能性があります。

于 2012-06-05T12:25:30.633 に答える