2012-07-03 70 views
0

我想从PHP(服务器)下载SQLITE数据库并将其复制到Android(客户端)的资产文件夹。我没有得到所需的输出。有人可以告诉我我犯了什么错误或错过了什么吗?谢谢你的帮助。下载并从数据库从服务器复制到资产文件夹android

代码:

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(); 
} 
} 
+0

请有人帮助我吗? – Yogi

+0

你不能保存在资产文件夹,但你可以保存在SD卡 –

+0

谢谢。我会照办的。 – Yogi

回答

2

你不能在你的Android应用程序的文件夹assets写入文件,因为它是不可写。 Android apk文件只能读取,不可写入。

+0

谢谢。你能建议我如何从服务器下载数据库到Android设备? – Yogi

+0

您可以将它下载到设备的外部存储器(sd卡)或应用程序的内部存储器中。有关更多信息,请参阅此处(http://developer.android.com/guide/topics/data/data-storage.html)。 – Angelo

+0

感谢您的帮助。我会照办的。 – Yogi

相关问题