私が現在持っているコードは、ネットワーク接続があるときにデータをデータベースに正常に送信します。私のアプリは屋外で使用されるもので、携帯電話サービスが非常に貧弱な場所で頻繁に使用されます。
私の質問は、アクティブなネットワーク接続が確立されるまで HTTP Post を遅らせる最善の方法は何でしょうか? 接続が利用可能になったときに警告される接続がない場合に実行されるサービスを作成する必要がありますか? 送信されるデータは約 1 キロバイトと小さいので、デバイスがオンラインになるまでアプリにデータを保存させてから、データを送信することができます。これは実行可能に見えますか?
もう1つの貧弱なオプションは、アプリにデータを保存させ、送信を待っているデータとそれを送信するためのアクティブな接続があるかどうかを起動するたびに確認することです。
現在、データを送信する必要があるコードは以下のとおりです。それについて何か提案があれば、それも大歓迎です。
String setPost(Context context)
{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(context.getResources().getString(R.string.url));
try
{
List<BasicNameValuePair> nameValuePairs = new ArrayList<BasicNameValuePair>(22);
nameValuePairs.add(new BasicNameValuePair("month", "7"));
... etc ...
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
InputStream is = response.getEntity().getContent();
BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(20);
int current = 0;
while ((current = bis.read()) != -1)
{
baf.append((byte)current);
}
Toast.makeText(context, "thank you for submitting!", Toast.LENGTH_LONG).show();
return new String(baf.toByteArray());
}
catch (ClientProtocolException e)
{
Log.e(this.toString(), "fail: " + e);
Toast.makeText(context, "submission failed :(\n please report the error below to developer\n" + e.toString(), Toast.LENGTH_LONG).show();
return ("fail: " + e);
}
catch (IOException e)
{
Log.e(this.toString(), "fail: " + e);
Toast.makeText(context, "submission failed :(\n please report the error below to developer:\n" + e.toString(), Toast.LENGTH_LONG).show();
return ("fail: " + e);
}