2011-01-11 12 views
7

私のアプリケーションには、アセットフォルダにSQLiteデータベースがあります。ユーザーがアプリケーションを起動すると、データベースとテーブルも作成されます。特定のバージョンのHTC DESIREを使用したSQLiteのテーブルがありませんHD

これは、多くのデバイス(Nexus One、Htc Magic、SGS、X10 ...、さらにHtc Desire HD v2.2)でうまく動作します。 私のアプリケーションはAndroidのすべてのバージョンで動作します(私のデバイス(1.6,2.2,2.2.1 Htcマジック)とエミュレータ(v1.3からv2.3まで)でテスト済みです。

私はただ問題ありますコンパイル中に、::HTC DESIRE HDビデオv2.2.1 1.72.405.3

logcat:。

android.database.sqlite.SQLiteException:いいえ、そのような表:LISTEはアンドロイドでLISTE から_idを選択します。 app.ActivityThread.performLaunchActivity(ActivityThread.java:2833) android.app.ActivityThread android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2179)android.osで でandroid.app.ActivityThread.access $ 2300(ActivityThread.java:136) で.handleLaunchActivity(ActivityThread.java:2854) 。 Handler.dispatchMessage(Handler.java:99)android.os.Looper.loop(Looper.java:143)の とandroid.app.ActivityThread.main(ActivityThread.java:5068) (java.lang.reflect)です。 Method.invokeNative(ネイティブメソッド) at java.lang.reflect.Method.invoke(Method.java:521) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:858) at com .android.internal.os.ZygoteInit.main(ZygoteInit.java:616) at dalvik.system.NativeStart.main(ネイティブメソッド) 原因:android.database.sqlite.SQLiteException:そのようなテーブルがありません:LISTE:コンパイル中に:select LISTのIDを android.database.sqlite.SQLiteCompiledSql.native_compile(ネイティブメソッド) android.database.sqlite.SQLiteCompiledSql .compile(SQLiteCompiledSql.java:91) android.database.sqlite.SQLiteCompiledSql(SQLiteCompiledSql.java:64) android.database.sqlite.SQLiteProgram(SQLiteProgram.java:80) android.database.sqlite .SQLiteQuery。(SQLiteQuery.java:46) android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:53) でandroid.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1417)アンドロイドで ました。 database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1387) ... 11 more

私のアプリケーションはデータベースを作成しますが、アセットフォルダのファイルのテーブルはdata\data\packagename\databases\mydatabaseにコピーされません。

マイコード:

public void createDataBase() throws IOException{ 

boolean dbExist = checkDataBase(); 

if(dbExist){ 
    //do nothing - database already exist 
}else{ 

    //By calling this method and empty database will be created into the default system path 
      //of your application so we are gonna be able to overwrite that database with our database. 
    this.getReadableDatabase(); 

    try { 

    copyDataBase(); 

    } catch (IOException e) { 

     throw new Error("Error copying database"); 

    } 
} 

} 

private void copyDataBase() throws IOException{ 

//Open your local db as the input stream 
InputStream myInput = myContext.getAssets().open(DB_NAME); 

// Path to the just created empty db 
String outFileName = DB_PATH + DB_NAME; 

//Open the empty db as the output stream 
OutputStream myOutput = new FileOutputStream(outFileName); 

//transfer bytes from the inputfile to the outputfile 
byte[] buffer = new byte[1024]; 
int length; 
while ((length = myInput.read(buffer))!= -1){ 
    if (length > 0){ 
    myOutput.write(buffer, 0, length); 
    }  } 

//Close the streams 
myOutput.flush(); 
myOutput.close(); 
myInput.close(); 

} 

私はcopydatabase機能に問題があると思いますが、私は表示されません。

このコードは、HTC DESIRE HD v2.2.1 1.72.405.3以外のすべてのデバイスで正常に動作します。

上記のバージョンのHTC Desireには、どのような問題がありますか?これはどのように救済できますか?

+1

投稿されたコードはデータベースの作成を扱います。あなたのエラーは、データベース内のテーブルから** SELECT **ステートメントを処理します。 –

+0

はい、ユーザーが最初のSQLリクエストを作成したときにデータベースが作成されるため、エラーはSELECT文を処理します。データベースは作成されますが、LISTEテーブルは含まれません。SELECTステートメントエラー – William

答えて

0

これは少しの推測であり、欲望のHDのためのAndroidのバージョンには「バグ」があることを意味するので、私は激しいことがあります。

私はAndroidのバージョンが行うべきデータベースを作成しないのだろうかと思います。 DB_PATHは通常は\ data \ data \ packagename \ databases \と仮定していますが、そうでない場合はどうなりますか?結果は

  1. this.getReadableDatabase()

    は、上記しなかったのでnew FileOutputStream(outFileName) は、単に新しい空のバイナリ ファイルを作成し使用して\一部\間違った\パス\ MyDatabaseという
  2. で空のデータベースを作成します...次のようになりますご希望の場所に データベースを作成してください。
  3. コピーがSELECTリクエストを実行する前に、正常
  4. 起こり、データベースへのアクセスはgetReadableDatabase()またはgetWriteableDatabase()のいずれかを使用して要求されますが、これらの両方は、単にステップ1.

で作成された空のデータベースを開きます。要するに、コピープロセスは正常に動作しているかもしれませんが、稼動しているDBは空で、期待した場所とは異なる場所にあります。

ちょうどアイデア(私は、同様のことが長年にわたり起こっているのを見ました)。

+2

こんにちは、 私のアプリケーションのユーザーのおかげで解決策が見つかりました。ここで ソリューション: [http://www.anddev.org/networking-database-problems-f29/missing-table-in-sqlite-with-specific-version-of-desire -hd-t50364.html] [1] [1]:http://www.anddev.org/networking-database-problems-f29/missing-table-in-sqlite-with-specific-version-of- desire-hd-t50364.html – William

+0

これは私のためには機能しません。 –

関連する問題