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.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.AsyncTask; import android.util.Log; import br.ufg.inf.es.fs.contpatri.mobile.gui.activity.ListaColetaActivity; import br.ufg.inf.es.fs.contpatri.mobile.usuario.Usuario; import br.ufg.inf.es.fs.contpatri.mobile.util.Preferencias; /** * 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 Autenticar extends AsyncTask<Void, Integer, Void> { private final ProgressDialog dialog; private final Usuario usuario; /** * Timeout para o servidor. */ private final int timeout = 10000; private Activity activity; private String mensagem; private boolean sucesso; /** * Construtor que ir instanciar a classe e inicializar as variveis * necessrias para poder realizar o processo de autenticao no * <b>WebService</b>. * * @param actv * <code>Activity</code> necessria para instanciar a * <code>ProgressDialog</code> e iniciar a tela de lista de * coletas de tombamentos caso a autenticao seja bem sucedida * @param user * usurio da aplicao que tentar logar pelo <b>WebService</b> */ public Autenticar(final Activity actv, final Usuario user) { dialog = new ProgressDialog(actv); usuario = user; 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_AUTENTICAR); httpPost.setHeader("Accept", "application/json"); httpPost.setHeader("Content-type", "application/json"); HttpResponse httpResponse; try { httpPost.setEntity(new StringEntity(usuario.toJson())); 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(Autenticar.class.getSimpleName(), "", e); } catch (final ClientProtocolException e) { Log.e(Autenticar.class.getSimpleName(), "", e); } catch (final IOException e) { Log.e(Autenticar.class.getSimpleName(), "", e); } catch (final JSONException e) { Log.e(Autenticar.class.getSimpleName(), "", e); } sucesso = true; return null; } @Override protected void onPostExecute(final Void result) { super.onPostExecute(result); dialog.dismiss(); /* * Verifica se a resposta do WebService for verdadeiro, se for, as * credenciais foram autenticadas e sero armazenadas no Android, caso * contrrio exibir o erro retornado pelo WebService. */ if (sucesso) { Preferencias.gravarUsuario(usuario.getLogin(), usuario.getSenha()); final Intent troca = new Intent(activity, ListaColetaActivity.class); activity.startActivity(troca); activity.finish(); } else { mostrarDialogo(activity, mensagem); } } @Override protected void onPreExecute() { super.onPreExecute(); dialog.setTitle("Autenticando..."); dialog.setMessage("Realizando login com " + usuario.getLogin()); dialog.setIndeterminate(true); dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); dialog.setCancelable(false); dialog.show(); } /** * Mtodo que exibe um <code>Dialog</code> caso haja erro no login do * usurio no aplicativo. * * @param contexto * <code>Context</code> necessrio para criar e exibir a caixa de * dilogo. * @param mensagem * mensagem de erro que ser exibida na <code>Dialog</code> para * informar o motivo de a aplicao no realizar o login * corretamente */ public static void mostrarDialogo(final Context contexto, final String mensagem) { AlertDialog.Builder builder; builder = new AlertDialog.Builder(contexto); 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(); } }