Java tutorial
/** * Esse documento parte do cdigo fonte e artefatos relacionados ao projeto * CONTPATRI, em desenvolvimento pela Fbrica de Software da UFG. * * Links relevantes: Fbrica de Software: http://fs.inf.ufg.br/ * Instituto de Informtica UFG: http://www.inf.ufg.br * Projeto CONTPATRI DROPBOX: https://www.dropbox.com/home/CONTPATRI%20-%20012013 * * Copyleft UFG. * * Licenciado sobre a licena GNU-GPL v3 * * Voc pode obter uma cpia da licena em http://www.gnu.org/licenses/gpl.html * * A menos que especificado ou exigido por legislao local, o software * fornecido "da maneira que est", sem garantias ou condies de qualquer tipo, * nem expressas nem implcitas. Em caso de dvidas referir a licena GNU-GPL. */ package br.ufg.inf.es.fs.contpatri.mobile.webservice; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; 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.BasicHttpParams; import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.os.AsyncTask; import android.util.Log; import br.ufg.inf.es.fs.contpatri.mobile.tombamento.TombamentoDAO; /** * Classe que cria uma Thread para comunicar com o WebService e enviar todas as * coletas que esto pendentes no aplicativo. * * @author Rogrio Tristo Junior * */ public final class EnviarColeta extends AsyncTask<Void, Integer, Void> { private final int timeout = 10000; private final Activity activity; private final ProgressDialog dialog; private String mensagem; private boolean sucesso; private TombamentoDAO tmbDAO; public EnviarColeta(final Activity actv) { dialog = new ProgressDialog(actv); tmbDAO = new TombamentoDAO(actv); activity = actv; } @Override protected Void doInBackground(final Void... params) { /* * Ajuste de timeout. */ final HttpParams httpParams = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(httpParams, timeout); HttpConnectionParams.setSoTimeout(httpParams, timeout); /* * Configuraes iniciais para estabelecer uma conexo HTTP. */ final DefaultHttpClient httpCliente = new DefaultHttpClient(httpParams); final HttpPost httpPost = new HttpPost(ListaLinks.URL_ENVIAR_COLETA); httpPost.setHeader("Accept", "application/json"); httpPost.setHeader("Content-type", "application/json"); HttpResponse httpResponse; try { httpPost.setEntity(new StringEntity(tmbDAO.getTodosJson())); httpResponse = httpCliente.execute(httpPost); /* * Se a resposta ao servidor for uma de cdigo maior ou igual a 400, * significa que houve erro que no houve comunicao com o * WebService. Caso contrrio a comunicao foi bem sucedida. */ if (httpResponse.getStatusLine().getStatusCode() >= 400) { sucesso = false; mensagem = httpResponse.getStatusLine().getReasonPhrase(); } else { BufferedReader reader = new BufferedReader( new InputStreamReader(httpResponse.getEntity().getContent(), "UTF-8")); StringBuilder builder = new StringBuilder(); for (String line = null; (line = reader.readLine()) != null;) { builder.append(line).append("\n"); } final JSONObject json = new JSONObject(builder.toString()); sucesso = json.getBoolean("sucesso"); mensagem = json.getString("mensagem"); } } catch (final UnsupportedEncodingException e) { Log.e(EnviarColeta.class.getSimpleName(), "", e); } catch (final ClientProtocolException e) { Log.e(EnviarColeta.class.getSimpleName(), "", e); } catch (final IOException e) { Log.e(EnviarColeta.class.getSimpleName(), "", e); } catch (final JSONException e) { Log.e(EnviarColeta.class.getSimpleName(), "", e); } return null; } @Override protected void onPostExecute(final Void result) { super.onPostExecute(result); tmbDAO.fecharConexao(); /* * Verifica se teve sucesso no envio, se teve, apenas fechar a caixa de * dilogo, caso contrrio ir mostrar uma outra caixa de dilogo que * informar o erro. */ if (sucesso) { Log.v(EnviarColeta.class.getSimpleName(), "Envio de realizado com sucesso"); } else { mostrarDialogo(); } dialog.dismiss(); } @Override protected void onPreExecute() { super.onPreExecute(); tmbDAO.abrirConexao(); dialog.setTitle("Sincronizando..."); dialog.setMessage("Aguarde a sincronizao"); dialog.setIndeterminate(true); dialog.show(); } /** * Mtodo que exibe um <code>Dialog</code> caso haja erro no login do * usurio no aplicativo. */ private void mostrarDialogo() { AlertDialog.Builder builder; builder = new AlertDialog.Builder(activity); builder.setTitle("Erro"); builder.setMessage(mensagem); builder.setIcon(android.R.drawable.ic_dialog_alert); builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() { @Override public void onClick(final DialogInterface dialog, final int which) { dialog.dismiss(); } }); final AlertDialog dialog = builder.create(); dialog.setCanceledOnTouchOutside(true); dialog.show(); } }