Как перенести базу данных SQLite на веб-сервер на телефоне Android (Android) - PullRequest
1 голос
/ 13 января 2011

У меня есть база данных «BackUpContacts.db» в SQLiteDatabase, у нее есть таблица «ContactInfo» с именами столбцов ContactId, ContactName, MobilePhone1, MobilePhone2, OfficePhone1, OfficePhone2, OfficePhone3, HomePhone1, HomePhone2 и TokenId.

То, что я хочу, - это перенести все данные таблицы «ContactInfo» в систему базы данных mysql на каком-либо сервере (значит, на сервере также есть таблица, аналогичная «ContactInfo», куда будут скопированы все данные «ContactInfo»).

Последняя важная вещь, которую я хочу, это то, что всякий раз, когда я хочу получить контакты (с указанным TokenId), я могу создавать резервные копии всех этих данных с сервера на мобильное устройство в XML-файле.

короче, может кто-нибудь помочь мне как перенести sqlite db на веб-сервер?

Ответы [ 3 ]

2 голосов
/ 13 января 2011

Одним из способов является передача данных на страницу php вашего веб-сайта с помощью метода GET или POST, который добавит их в MySql на удаленном сервере приложений, например,

    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 & name = john ... Это также должен быть запрос AsyncTask doInBackground ... Проблема в том, сколько записей может быть загружено одновременно ...

Легко сделать удаленный сервер приложенийсоздайте файл XML по запросу, который будет загружен Android, с аналогичным запросом, как указано выше.

0 голосов
/ 18 января 2011

Другой способ, который я нашел через Интернет, это как отправить файл xml на веб-сервер: Для этого вам нужно добавить файл jar "commons-httpclient.jar" в ваш проект. (Как добавить jar-файл ясно упоминается ChristianB в посте выше / ниже)

Вы можете скачать этот файл jar из http://www.java2s.com/Code/Jar/ABC/Downloadcommonshttpclientjar.htm 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();
         }
     }
0 голосов
/ 15 января 2011

Это пример того, как загрузить файл XML из http://w3mentor.com/learn/java/android-development/android-http-services/example-of-multipart-post-using-android/ Где файл data.xml и еще два поля («один» и «два») загружаются на сервер. Обратите внимание, что для этого потребуются дополнительные библиотеки jar, которые вам нужно скачать и поместить в папку «lib» на том же уровне, что и папки «res» и «src» в проекте. Вот три файла 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 и выбрав Файл> Свойства> Путь сборки Java> Библиотеки, а затем [Добавить файлы]

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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...