Android обновляет информацию из базы данных - PullRequest
0 голосов
/ 28 декабря 2011

Я работаю над проектом Android, где собираю некоторую информацию с веб-сервера.Каждый раз, когда приложение запускается, я загружаю данные JSON и повторно вводю информацию в базу данных.У меня есть такой сценарий:

  1. Приложение запускается, я удаляю все данные в базе данных sqlite и вставляю их снова (это необходимо, если есть некоторые изменения в данных json).
  2. ХотяЯ загружаю нового пользователя json и не вижу никакой информации, потому что уже удалил ее.Он может периодически видеть, когда отдельные элементы загружаются и вставляются в базу данных.
  3. После того, как весь процесс завершен, все загружено и вставлено, пользователь может видеть всю новую доступную информацию.

Поэтому мне нужна идея, как это сделать: когда я начинаю загружать данные из json, когда приложение запускается, пользователь должен быть доступен, чтобы увидеть старую информацию.Когда я буду готов со всей информацией, и все будет загружено, весь JSON мне придется удалить / обновить / вставить новые данные, и все должно произойти так быстро, что пользователь не должен этого замечать.

Есть идеи, как мне это сделать?

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 28 декабря 2011

Есть 3 возможности.

AsyncTask

Это первый «очевидный» выбор, пока вы не поймете, что у фреймворка есть много проблем (например, как обращаться с onConfigChange )

ContentHandler / Account / SycnService

Это наиболее сложное решение.Сначала вы должны знать, что эти 3 части собрались вместе.Таким образом, вам придется написать «тупую» учетную запись, если она вам не нужна, и «недоработанную» ContentHandler, если у вас есть SQLLite.

Служба

Я выбралиспользуйте IntentService, и я очень доволен.

  1. Когда начинается действие, оно отображает Данные.Регистрируется для Intent my.app.DATA_UPDATED.И отправить намерение my.app.DATA_REQUESTED
  2. В манифесте объявляется IntentService с фильтром намерений DATA_REQUESTED.
  3. При получении намерения служба извлекает данные и обновляет базу данных.После этого отправляется намерение DATA_UPDATED.
  4. Операция обновляет представление текущими данными при получении намерения DATA_UPDATED.
0 голосов
/ 28 декабря 2011

Вам необходимо использовать AsyncTask

step-1 удалить все daa из базы данных и очистить представление списка в методе onPreExecute ()

step-2 загрузить данные с сервера в doBackground () и сохранить в базу данных

step-3 onPostExecute обновить представление списка с последними данными

import android.content.Context;
import android.os.AsyncTask;
import android.view.View;



public class LoadingDataFromServer extends AsyncTask {
    Context currentContext = null;
ListView listview = null;
    boolean isCancelled = false;

    // private ProgressDialog progressDialog = null;
    public LoadingDataFromServer(Context context, ListView list) {
        currentContext = context;
listview = list;

    }

    @Override
    protected void onPreExecute() {
        //delete all the daa from database
//clear listview

        super.onPreExecute();
    }

    @Override
    protected Object doInBackground(Object... params) {
        // do background processing

        try {
            // getdata from server and store in SQLitedatabase

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Object result) {
        // TODO Auto-generated method stub
        // progressDialog.dismiss();
//update the listview after getting the data

        super.onPostExecute(result);
    }

    @Override
    protected void onCancelled() {
        // TODO Auto-generated method stub
        isCancelled = true;
        super.onCancelled();
    }

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