【问题标题】:How to transfer SQLite db to web server on android phone (android)如何将 SQLite db 传输到 android 手机 (android) 上的 Web 服务器
【发布时间】:2011-01-13 10:59:27
【问题描述】:

我在 SQLiteDatabase 中有“BackUpContacts.db”数据库,它有一个名为“ContactInfo”的表,其列名称为 ContactId、ContactName、MobilePhone1、MobilePhone2、OfficePhone1、OfficePhone2、OfficePhone3、HomePhone1、HomePhone2 和 TokenId。

我想要的是将“ContactInfo”表的所有数据传输到某个服务器上的 mysql 数据库系统(意味着服务器还有一个类似于“ContactInfo”的表,其中“ContactInfo”的所有数据都将被复制)。

我想要的最后一件重要的事情是,每当我想要获取联系人(具有指定的 TokenId)时,我都可以将所有联系人从服务器备份到 xml 文件中的移动设备。

简而言之,有人可以帮我如何将 sqlite db 传输到 Web 服务器吗?

【问题讨论】:

  • 你的服务器上安装了 phpMyAdmin 吗?

标签: android mysql sqlite


【解决方案1】:

一种方法是使用 GET 或 POST 方法将数据提交到您网站的 php 页面,这会将数据添加到远程应用程序服务器上的 MySql 中,例如

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

网址可以是:www.mysite.com?id=5&name=john ... 这也必须是 AsyncTask doInBackground 请求... 问题是一次可以上传多少条记录...

很容易使远程应用程序服务器根据请求生成一个 XML 文件以供 android 下载,类似于上面的请求。

【讨论】:

  • 感谢 ChristianB 的回复,您(或任何人)能否详细说明如何将 xml 文件发送到 Web 服务。 (因为我将“ContactInfo”表的所有数据存储在“contacts.xml”文件中,现在我想将此xml文件发送到Web服务)
【解决方案2】:

这是一个如何从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、commons-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;
    }

}

【讨论】:

  • ChristianB 再次感谢您,您解释得很好,一切都很准确。您能详细介绍一下 ByteArrayInputStream() 构造函数的第二个参数“uploadedFile”,它实际上在做什么吗?它也用于 'multipartContent.addPart("uploadedFile", isb);'。是在服务器端(或在 Web 服务,等等)。
  • 其实我不知道如何使用网络服务,我是第一次这样做。您提到的示例帮助我了解了如何发送请求,再次感谢您。 :)
  • "uploadedFile" 只是 Java 方法在将文件转换为可上传的形式时需要的名称。这一切都在android方面。 “uploadedFile”的第二次出现将为网站提供包含正在提交的文件的对象的引用或名称。然后这个对象就可以被处理并保存在服务器磁盘上。
  • w3schools.com/PHP/php_file_upload.asp 在此链接中有一个如何上传文件的代码,尽管这是关于图像上传的。请注意,android 会做与“创建上传文件表单”网页相同的操作。因此,您需要了解其余部分的工作原理,即带有“保存上传文件”代码的 upload_file.php。 PHP 在 android 上比 Java 更简单...这里是如何打开和读取保存后的 xml 的教程:kirupa.com/web/xml_php_parse_beginner.htm
  • 如果你去 lynda.com 支付一个月的订阅费,你可以在一天内学会 PHP。它有关于大多数软件的强大的专业视频教程,它为我创造了奇迹,就像将知识下载到大脑中一样。
【解决方案3】:

我在网上找到的另一种方式是如何将 xml 文件发送到 web 服务器: 为此,您需要在项目中添加一个 jar 文件“commons-httpclient.jar”。 (ChristianB 在上面/下面的帖子中明确提到了如何添加 jar 文件)

你可以从http://www.java2s.com/Code/Jar/ABC/Downloadcommonshttpclientjar.htm下载这个jar文件 2.代码是……

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-09-09
  • 1970-01-01
  • 2012-05-03
  • 2017-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多