データベースにたくさんのレコードを書き込んでいsqlite
ます。保存されたレコード数が 10 の倍数に達するたびに、それらの 10 個のレコードをオブジェクトに保存し、リモート サーバーに送信したいと考えています。
別のスレッドでタスクを達成するにはどうすればよいですか?
データベースにたくさんのレコードを書き込んでいsqlite
ます。保存されたレコード数が 10 の倍数に達するたびに、それらの 10 個のレコードをオブジェクトに保存し、リモート サーバーに送信したいと考えています。
別のスレッドでタスクを達成するにはどうすればよいですか?
http を使用する場合は、このサンプルコードを使用できます。
Thread background = new Thread(new Runnable(){
@Override
public void run() {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://your-url.com");
try {
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("paramName", paramValue));
nameValuePairs.add(new BasicNameValuePair("paramName2", paramValue2));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
httpclient.execute(httppost);
} catch (Exception e) {
Log.w("error", e.toString());
}
});
background.start();
すべての挿入が単一のメソッドから発生した場合、サーバーに送信されるアイテム ID の内部キャッシュを保持し、セットが 10 に達したときに、それらの 10 レコードを取得して、バックグラウンド スレッドでサーバーへの送信を実行できます。
これの疑似コードは次のようなものかもしれません...
Set<Long> ids = new TreeSet<Long>;
public void insert(Data data) {
long id = sqlite.insert(data);
ids.add(id);
if (ids.size()>=10) {
postToServer();
}
}
public void postToServer() {
// build select statement using the 10 ids in the set.
// clear the set
ids.clear();
// create a new thread and then post your results to the server
// optionally update those 10 ids in the database to indicate that they have been sent to the server
}
上記のコードは、メモリ内に 10 個の long 値のキャッシュしか保持しないため、メモリ内でそれを追跡することは大したことではありません。そして、挿入されたレコードの挿入されたIDを持っているので、次のようなものを使用して単一の選択ステートメントを作成します
select * from TABLE where _ID in (YOUR ID LIST)
同様にかなり効率的である必要があります。
サーバーへのポストを 1 つのスレッドだけに実行させたい場合は、上記のロジックを変更して、ID セットのサイズを監視する単一のバックグラウンド スレッドを作成し、それが 10 に達するとポストを実行するようにすることができます。サーバー。
テーブルの行数を知るには
final String SQL_STATEMENT = "SELECT COUNT(*) FROM サンプル;
10の倍数のときにカウントを確認できます
テーブル内の列のような日付がある場合は、このアプローチを使用できます。
最終文字列 orderBy = Constants.TABLE_CONVERSATION_FIELD_DATE + "DESC LIMIT 10"
return db.query(table, columns, selection, null, null, null, orderBy);
データベースから値を取得し、その値をサーバーに渡す必要があります。