0

assets フォルダー内にデータベースがあります。Android 4.0 では問題なく動作しますが、2.2 または 2.1 ではデータベースのコピー中にエラーがスローされます。これはログからのものです:

Data exceeds UNCOMPRESS_DATA_MAX (1532928 vs 1048576)

これは、ファイルが大きすぎるということですか?

OpenHelper のコード:

public static class DictionaryOpenHelper extends SQLiteOpenHelper 
{
    private final Context mHelperContext;
    private SQLiteDatabase mDatabase;

    private static String DB_PATH="/data/data/com.example.enigmar/databases/";
    private static final String DB_NAME = "gesla.db";

    DictionaryOpenHelper(Context context) 
    {
        super(context, DB_NAME, null, 1);
        this.mHelperContext = context;
    }

    @Override
    public void onCreate(SQLiteDatabase db)
    {

    }

    public void createDataBase() throws IOException
    {

        boolean mDataBaseExist = checkDataBase();

        if(!mDataBaseExist)
        {
            this.getReadableDatabase();
            this.close();
            try 
            {
                copyDataBase();
                Log.e(TAG, "createDatabase database created");
            } 
            catch (IOException mIOException) 
            {
                throw new Error("ErrorCopyingDataBase");
            }
        }

    }

    private boolean checkDataBase()
    {

        File dbFile = new File(DB_PATH + DB_NAME);
        return dbFile.exists();

    }

    private void copyDataBase() throws IOException
    {

        InputStream mInput = mHelperContext.getAssets().open(DB_NAME);

        String outFileName = DB_PATH + DB_NAME;

        OutputStream mOutput = new FileOutputStream(outFileName);

        byte[] mBuffer = new byte[1024];
        int mLength;
         while ((mLength = mInput.read(mBuffer))>0)
         {
             mOutput.write(mBuffer, 0, mLength);
         }
         mOutput.flush();
         mOutput.close();
         mInput.close();

        }

    public boolean openDataBase() throws SQLException
    {

        String mPath = DB_PATH + DB_NAME;
        mDatabase = SQLiteDatabase.openDatabase(mPath, null, SQLiteDatabase.CREATE_IF_NECESSARY);
        return mDatabase != null;
    }

    @Override
    public synchronized void close() {

    if(mDatabase != null)
        mDatabase.close();

    super.close();

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

}
4

1 に答える 1

0

assets フォルダーに大きなファイル (1M 以上) を保存することはできません。ファイルを小さな部分に分割するか、raw フォルダーに移動します。ここでは、ファイルを分割する方法について説明します。

于 2013-01-27T12:45:43.663 に答える