Envío de los datos al servidor a través del correo cuando la conexión a Internet vuelve

En mi aplicación, estoy enviando los datos al servidor a través del método post en formato json. Aquí puedes ver mi código.

JSONObject object1 = new JSONObject(); object1.put("homesafe_events_version", "1.0"); JSONObject object = new JSONObject(); object.put("PhoneNumber", phoneNumber); object.put("EventTypeID", Integer.parseInt(eventTypeId)); object.put("FreeFromText", ""); object.put("EventTime", eventTime ); object.put("Latitude", latitude); object.put("Longitude", longitude); object.put("Altitude", Double.parseDouble(df.format(altitude))); object.put("HorizAccuracy",Double.parseDouble(df.format(horizAccuracy))); object.put("VertAccuracy", vertiAccuracy); object.put("Speed", speed); object.put("Heading", Double.parseDouble(df.format(heading))); object.put("BatteryStatus", batteryStatus); object1.put("Event", object); String str = object1.toString(); HttpClient client = new DefaultHttpClient(); String encodedURL = URLEncoder.encode(str, "UTF-8"); HttpPost request = new HttpPost(url); List<NameValuePair> value = new ArrayList<NameValuePair>(); value.add(new BasicNameValuePair("Name", encodedURL)); // UrlEncodedFormEntity entity=new UrlEncodedFormEntity(value); StringEntity entity = new StringEntity(str, "UTF8"); request.setHeader("Content-Type", "application/json"); request.setEntity(entity); HttpResponse response = client.execute(request); HttpEntity resEntity = response.getEntity(); response_str = EntityUtils.toString(resEntity); 

Cada cosa está funcionando correctamente. Hay un botón en mi app. Al chascar ese botón, algunos valores se calculan y pasan en los parámetros para enviarlos al servidor. Ahora supongamos que el Internet no está disponible y yo presioné ese botón por 5 veces entonces En este caso todos los valores que se calculó 5 veces se almacenan en otro lugar y cuando la conexión llega el servicio web se golpeó y todos los datos se enviarán al servidor.Esto es mi problema real.Por favor, me sugieren qué hacer. Gracias por adelantado !!

Puede crear una base de datos y almacenar esos valores allí. Ahora, después de enviar esos valores, debes eliminarlos de tu base de datos.

Ahora, cree una clase de difusión que siempre compruebe el estado de la red. Cuando la red viene comprobará que db y los envía en el servidor. Puede codificarlo en consecuencia.

 public class NetworkStatusChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { boolean status = Utility.isInternetAvailable(context); if (!status) { Toast.makeText(context, "Network Error !", Toast.LENGTH_SHORT).show(); } } } 

Ponga esto en manifiesto.

  <receiver android:name="NetworkStatusChangeReceiver" android:label="NetworkStatusChangeReceiver" > <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> <action android:name="android.net.wifi.WIFI_STATE_CHANGED" /> </intent-filter> </receiver> 

Esto podría ser útil !!!!!

¿Qué hay de almacenar los datos temporalmente dentro de una base de datos SQLite o un archivo de preferencias compartidas ?

Usted podría hacer algo como esto para comprobar si la conexión está disponible

 private boolean isNetworkAvailable() { ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); return activeNetworkInfo != null && activeNetworkInfo.isConnected(); } 

Crearía un servicio de Android que hace esta comprobación en el fondo cada pocos segundos / minutos y hace el poste si la conexión está disponible.

He resuelto este caso haciendo esto:

1º Crear una manera de persistir los Datos a publicar, dejando lugar a una columna de estado (enviada / noSentada). Utilicé SqLite dataBase;

2º Crear una clase comunicadora que POST los Datos;

3º Crear un IntentService que compruebe si se trata de cualquier Data en la Base de Datos no publicada.

El siguiente código es sólo para referencia:

  @Override protected void onStart() { super.onStart(); //Start the IntentService Intent intent = new Intent(this, IntentService.class); startService(intent); } //... private void sendData() { synchronized (this) { //Save the Data in local dataBase. DataToSend dataTosend = new DataToSend(foo, bar); dataTosend.save(context); //Pass the data to communicator communicator.sendData(dataTosend); } } 

 //Communicator.class public void sendData(DataToSend dataTosend) { //Code to send the Data to the server //POST Request successfully: dataTosend.setAsSent(); //POST Request failure: dataTosend.setAsNotSent(); } 

 //IntentService.class //... private synchronized void sincroniza(String token) { //Check for dataTosend not yet send List<DataTosend> dataTosends = DataTosend.getNotSent(context); thatIsNotSentDataToSend = dataTosends.size() > 0; while (thatIsNotSentDataToSend) { synchronized (this) { try { for (DataTosend dataTosend : dataTosends) { //Send the data and mark as sent communicator.sendData(dataToSend); //If the comunicador send this data successfully, it will mark as sent (setAsSent() method). //Clear the local DataBase DataTosend.clearSentData(context); } //Verifies that there is still unsent Data dataTosends = DataToSend.getNotSent(context); thatIsNotSentDataToSend = (dataTosends.size() > 0); } catch (InterruptedException e) { e.printStackTrace(); } } } 
  • Obtener y analizar archivo CSV en android
  • JSON Parsing funciona en Android 4.0 pero no en Android <4.0
  • cómo cambiar los datos en un idioma diferente que viene del servidor?
  • Alternativa del método Jsoup.parse ()
  • Jsoup no puede leer el archivo de retorno xml
  • Error de análisis de Android JSON no se puede convertir a JSONArray
  • ¿Por qué este análisis de SimpleDataFormat falla en Android?
  • Clase de modelo para Jackson Parser para analizar propiedades en mayúsculas
  • Análisis de Android JSONObject
  • Cómo analizar 2013-03-13T20: 59: 31 + 0000 cadena de fecha hasta la fecha
  • JSON VS simple manipulación de cadenas para analizar HttpRequest en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.