package esri.mrm.mobile.task; import java.io.IOException; import java.io.UnsupportedEncodingException; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.StatusLine; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.params.CoreConnectionPNames; import esri.mrm.mobile.R; import esri.mrm.mobile.WorkOrder; import esri.mrm.mobile.activity.StopTypeActivity; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.os.AsyncTask; public class SaveStopTask extends AsyncTask<String, Void, Boolean> { private WorkOrder workOrder; private Activity activity; private Context context; private ProgressDialog progressDialog; private CompleteListener listener; String msg = ""; public SaveStopTask(WorkOrder workOrder, Activity activity, Context context, CompleteListener listener) { this.workOrder = workOrder; this.activity = activity; this.context = context; this.listener = listener; } @Override protected Boolean doInBackground(String... uri) { msg = ""; activity.runOnUiThread(new Runnable() { public void run() { showProgressDialog(); } }); try { String jsonString = workOrder.getJsonString(workOrder.getRouteName()); System.out.println(jsonString); StringEntity input; input = new StringEntity(jsonString); input.setContentType("application/json"); HttpPost postRequest = new HttpPost(uri[0]); postRequest.setEntity(input); HttpClient httpclient = new DefaultHttpClient(); httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 30000); httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 30000); HttpResponse response = httpclient.execute(postRequest); StatusLine statusLine = response.getStatusLine(); if (statusLine.getStatusCode() == HttpStatus.SC_OK) { return true; } else { msg = "HTTP Status code is " + statusLine.getStatusCode(); return false; } } catch (UnsupportedEncodingException e) { msg = e.getMessage(); return false; } catch (ClientProtocolException e) { msg = e.getMessage(); return false; } catch (IOException e) { msg = "Unable to access server. This may be caused by the lack of network coverage. Please try again when you have coverage."; return false; } catch (Exception e) { msg = e.getMessage(); return false; } } @Override protected void onPostExecute(Boolean result) { progressDialog.dismiss(); if (result) { showUpdateResult(true, msg); } else { showUpdateResult(false, msg); } } private void showProgressDialog() { progressDialog = new ProgressDialog(context); progressDialog.setTitle("Processing..."); progressDialog.setMessage("Please wait."); progressDialog.setCancelable(false); progressDialog.setIndeterminate(true); progressDialog.show(); } private void showUpdateResult(final boolean successful, final String msg) { activity.runOnUiThread(new Runnable() { public void run() { AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context); // set title alertDialogBuilder.setTitle(R.string.updateResult); String newMsg = msg; if (newMsg.length() > 0) newMsg = " - " + msg; // set dialog message alertDialogBuilder.setMessage((successful ? activity.getResources().getString(R.string.updateSucceeded) : activity.getResources().getString(R.string.updateFailed)) + " " + newMsg).setCancelable(false).setPositiveButton(R.string.okButtonLabel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); if(listener != null) listener.resultCallback(successful); } }); // create alert dialog AlertDialog alertDialog = alertDialogBuilder.create(); // show it alertDialog.show(); } }); } }