当有网络连接时,我目前拥有的代码成功地将数据提交到数据库。我的应用程序是一款可以在户外使用的应用程序,经常在手机服务很差的地方使用。
我的问题是在有活动网络连接之前延迟 HTTP Post 的最佳方法是什么?如果连接可用时没有警告连接,我应该创建一个运行的服务吗?传输的数据很小,大约一千字节,所以我可以让应用程序存储它,直到设备在线,然后提交数据。这看起来可行吗?
另一个更糟糕的选择是让应用程序存储数据并在每次启动时检查是否有任何数据仍在等待提交以及提交数据的活动连接。
我目前必须提交数据的代码如下。如果您对此有任何建议,也将非常受欢迎。
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);
}