1

我想从 PHP(服务器)下载 SQLITE 数据库并将其复制到 Android(客户端)的 assets 文件夹中。我没有得到所需的输出。谁能告诉我我在哪里做错或错过了什么?谢谢你的帮助。

代码:

    boolean downloadDatabase(Context context) {
    try {
           Log.d("test", "downloading database");
            URL url = new URL("http://10.0.2.2/SvcEnggPlanner/" + "Services.sqlite");
            URLConnection ucon = url.openConnection();
            InputStream is = ucon.getInputStream();
            BufferedInputStream bis = new BufferedInputStream(is);
            ByteArrayBuffer baf = new ByteArrayBuffer(50);
            int current = 0;
            while ((current = bis.read()) != -1) {
                    baf.append((byte) current);
            }

           FileOutputStream fos = null;

            fos = context.openFileOutput("Services.sqlite", Context.MODE_PRIVATE); 
            if(fos!=null){
            fos.write(baf.toByteArray());
            fos.close();
           Log.d("test", "downloaded");
            }
    } catch (IOException e) {
            Log.e("test", "downloadDatabase Error: " , e);
            return false;
    }  catch (NullPointerException e) {
            Log.e("test", "downloadDatabase Error: " , e);
            return false;
    } catch (Exception e){
            Log.e("test", "downloadDatabase Error: " , e);
            return false;
    }
    return true;
}

public void copyServerDatabase() {
    SQLiteDatabase db = getReadableDatabase();
    db.close();

        OutputStream os = null;
        InputStream is = null;
       try {
                Log.d("test", "Copying DB from server version into app");
                is = context.openFileInput("Services.sqlite");
                Log.d("test", ""+is);
                os = new FileOutputStream("/data/data/com.sever/databases/");
                Log.d("test", ""+os);
                copyFile(os, is);
       } catch (Exception e) {
           Log.d("test", "Server Database was not found - did it download correctly?");                          
       } 
finally {
                try {

                        if(os != null){
                                os.close();
                        }
                        if(is != null){
                                is.close();
                        }
                } catch (IOException e) {
                        Log.d("test", "failed to close databases");
                }
       }
       Log.d("test", "Done Copying DB from server");

}

    private void copyFile(OutputStream os, InputStream is) throws IOException {
    Log.d("test", "In CopyFile");
       byte[] buffer = new byte[1024];
       int length;
       while((length = is.read(buffer))>0){
            os.write(buffer, 0, length);
       }
       os.flush();
 }
 }
4

1 回答 1

3

您无法在assetsAndroid 应用程序的文件夹中写入文件,因为它不可写。Android apk 的文件只可读不可写。

于 2012-07-03T08:57:16.990 回答