코드는 현재 네트워크에 연결되어있을 때 데이터베이스에 데이터를 성공적으로 제출했습니다. 내 앱은 실외에서 사용되는 앱이며, 셀 서비스가 매우 부족한 곳에서 자주 사용됩니다.HTTP POST가 온라인 일 때까지 지연됩니다.
제 질문은 활성 네트워크 연결이있을 때까지 HTTP Post를 지연시키는 가장 좋은 방법은 무엇입니까? 연결이 가능할 때 경고를받는 연결이없는 경우 실행되는 서비스를 만들어야합니까? 전송되는 데이터는 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);
}