2011-01-13 23 views
1

我在SQLiteDatabase 「BackUpContacts.db」 數據庫,它有一個名爲 「的ContactInfo」 列名的ContactID名稱,聯繫人姓名,MobilePhone1,MobilePhone2,OfficePhone1,OfficePhone2表,OfficePhone3,HomePhone1,HomePhone2和TokenId。怎樣的SQLite數據庫Android手機(安卓)上轉移到Web服務器

我想要的是將「ContactInfo」表中的所有數據傳輸到某個服務器上的mysql數據庫系統(意味着服務器也有一個類似於「ContactInfo」的表格,其中將複製「ContactInfo」的所有數據)。

,我想最後一個重要的事情是,每當我想要得到的聯繫人(指定TokenId的)我可以備份所有這些從服務器到移動設備中的XML文件。

總之

,可以在這裏任何人幫助我如何的SQLite數據庫轉移到Web服務器?

+0

你有安裝phpMyAdmin的你的服務器? – Wacek 2011-01-13 11:58:51

回答

2

一種方式是通過使用GET或POST方法,將它添加到您的MySQL的遠程應用程序服務器上提交數據到你的網站的PHP頁面,像

HttpGet request = new HttpGet(url); 
    ResponseHandler<String> responseHandler = new BasicResponseHandler(); 
    HttpClient client = new DefaultHttpClient(); 
    String response = client.execute(request, responseHandler); 

URL可以是:www.mysite.com ?ID = 5 &名稱=約翰。 這也必須是一個的AsyncTask doInBackground請求...... 問題是如何對多條記錄可以一次上傳...

它容易使遠程應用程序服務器根據請求生成一個XML文件,以便通過android下載,並具有類似的請求波夫。

+0

感謝ChristianB的回覆,您可以(或任何人)詳細說明如何將xml文件發送到Web服務。(因爲我將「ContactInfo」表中的所有數據存儲在「contacts.xml」文件中,現在我想將這個xml文件發送到Web服務) – 2011-01-15 12:14:36

0

這是一個示例,如何從http://w3mentor.com/learn/java/android-development/android-http-services/example-of-multipart-post-using-android/上傳XML文件 其中data.xml文件和兩個字段(「一個」和「兩個」)上傳到服務器。請注意,這需要額外的jar庫,您需要下載並放置在與項目中的「res」和「src」文件夾相同級別的「lib」文件夾中。 這裏有您需要的三個jar文件httpmime-4.0.jar,Apache的mime4j-0.6.jar,公共-IO-1.4.jar:

http://james.apache.org/download.cgi#Apache_Mime4J

https://repository.apache.org/content/repositories/releases/org/apache/httpcomponents/httpmime/4.0.1/httpmime-4.0.1.jar

http://code.google.com/p/mapmap/downloads/detail?name=commons-io-1.4.jar&can=2&q=

您可以通過在Exclipse中選擇項目並點擊File> Properties> Java Build Path> Libraries,然後點擊[Add jars]將其添加到項目中。

import java.io.ByteArrayInputStream; 
import java.io.InputStream; 
import org.apache.commons.io.IOUtils; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.entity.mime.MultipartEntity; 
import org.apache.http.entity.mime.content.InputStreamBody; 
import org.apache.http.entity.mime.content.StringBody; 
import org.apache.http.impl.client.DefaultHttpClient; 
import android.app.Activity; 
public class TestMultipartPost extends Activity 
{ 
    public void executeMultipartPost()throws Exception 
    { 
     try { 
      InputStream is = this.getAssets().open("data.xml"); 
      HttpClient httpClient = new DefaultHttpClient(); 
      HttpPost postRequest = new HttpPost("http://w3mentor.com/Upload.aspx"); 
      byte[] data = IOUtils.toByteArray(is); 
      InputStreamBody isb = new InputStreamBody(new ByteArrayInputStream(data),"uploadedFile"); 
      StringBody sb1 = new StringBody("someTextGoesHere"); 
      StringBody sb2 = new StringBody("someTextGoesHere too"); 
      MultipartEntity multipartContent = new MultipartEntity(); 
      multipartContent.addPart("uploadedFile", isb); 
      multipartContent.addPart("one", sb1); 
      multipartContent.addPart("two", sb2); 
      postRequest.setEntity(multipartContent); 
      HttpResponse res = httpClient.execute(postRequest); 
      res.getEntity().getContent().close(); 
     } catch (Throwable e) 
     { 
      // handle exception here 
     } 
    } 
} 

還有一件事,你需要在「後臺」運行此作爲異步任務是這樣的:

private class XmlUploadTask extends AsyncTask<Object, String, Boolean> { 
    private static final String DEBUG_TAG = "XmlUploadTask"; 
    ProgressDialog pleaseWaitDialog; 

    @Override 
    protected void onCancelled() { 
     Log.i(DEBUG_TAG, "onCancelled"); 
     pleaseWaitDialog.dismiss(); 
    } 

    @Override 
    protected void onPostExecute(Boolean result) { 
     Log.i(DEBUG_TAG, "onPostExecute"); 
     pleaseWaitDialog.dismiss(); 
    } 

    @Override 
    protected void onPreExecute() { 
     pleaseWaitDialog = ProgressDialog.show(myActivity.this, "My Application", "Uploading data...", true, true); 
     pleaseWaitDialog.setOnCancelListener(new OnCancelListener() { 

      public void onCancel(DialogInterface dialog) { 
       XmlUploadTask.this.cancel(true); 
      } 
     }); 
    } 

    @Override 
    protected Boolean doInBackground(Object... params) { 
//here you enter the xml upload code above 
     return null; 
    } 

} 
+0

ChristianB再次感謝,你解釋得很好,一切都很精確。你能告訴我更多關於ByteArrayInputStream()構造函數的第二個參數「uploadedFile」,它究竟做了什麼?它也用在'multipartContent.addPart(「uploadedFile」,isb)''中。這是在服務器端(或在Web服務,無論)。 – 2011-01-17 07:11:15

+0

其實我不知道如何使用網絡服務,我是第一次這樣做。你提到的例子幫助我理解了如何發送請求,多謝了一次。 :) – 2011-01-17 07:22:28

0

的另一種方式,我發現在網上是如何將XML文件發送到Web服務器: 對於這一點,你需要「公地httpclient.jar」在你的項目中添加一個jar文件。 (如何添加jar文件明確ChristianB在上述/後下)

您可以從http://www.java2s.com/Code/Jar/ABC/Downloadcommonshttpclientjar.htm 2.code會下載這個jar文件...

import org.apache.commons.httpclient.HttpClient; 
    import org.apache.commons.httpclient.methods.InputStreamRequestEntity; 
    import org.apache.commons.httpclient.methods.PostMethod; 

    import java.io.File; 
    import java.io.FileInputStream; 

    class ClassName extends Activity 
    { 
     public void Sync(View v) // on button click 
     { 
      File xmlFile = new File("sdcard/contacts.xml"); 
      FileInputStream fis = new FileInputStream(xmlFile); 
      InputStreamRequestEntity isre = new InputStreamRequestEntity(fis); 

       /*now pass url of server in constructor of PostMethod*/ 
      PostMethod post = new PostMethod("http://w3mentor.com/Upload.aspx"); 
      post.setRequestEntity(isre); 
      post.setRequestHeader("Content-Type", "text/xml"); 

      HttpClient httpclient = new HttpClient(); 
      int response = httpclient.executeMethod(post); 
      String res = post.getResponseBodyAsString(); 
      Toast.makeText(GetContacts.this, new Integer(response).toString()+" "+res, Toast.LENGTH_LONG).show(); 
      post.releaseConnection(); 
     } 
    } 
相關問題