{Resolvido} Android + servlet (conexão)

Opa!

Estou tentando fazer a conexão entre o android e um servlet, mas não funciona. No log window do android, sempre da o seguinre erro: Conection Refused.

Código Android

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.me.gustavoandroid;

/**
 *
 * @author gustavo
 */
import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import java.net.HttpURLConnection;

public class SincronizarServidor extends Activity {

    private static final String TAG = "Test";
    protected static EditText username;
    protected static EditText password;

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.login);

    }

    public void onClickBtSincronizarServidor(View v) {
        EditText username = (EditText) findViewById(R.id.txtUsuario);
        EditText password = (EditText) findViewById(R.id.txtSenha);
        String uname = username.getText().toString();
        networkthread ob = new networkthread(uname);
    }

    class networkthread implements Runnable {
        private static final String TAG = "Test";
        String uname;

        public networkthread(String uname) {
            this.uname = uname;
            Thread t = new Thread(this);
            t.start();
        }

        public void run() {
            Log.v(TAG, "---------> INICIO");
            try {
                URL urlObj = new URL("http://localhost:8080/Gustavo-Android-Servlet/Servidor");
                String x = (String) (Object) urlObj;
                HttpURLConnection httpConn = (HttpURLConnection) urlObj.openConnection();
                httpConn.setDoInput(true);
                httpConn.setDoOutput(true);
                httpConn.setUseCaches(false);
                httpConn.setRequestMethod("POST");
                httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                httpConn.setRequestProperty("Content-Language", "pt-BR");
                httpConn.setRequestProperty("Accept", "application/octet-stream");
                httpConn.setRequestProperty("Connection", "close");
                DataOutputStream dos = new DataOutputStream(httpConn.getOutputStream());
                dos.writeBytes("funcionou");
                dos.close();
            } catch (Exception e) {
                Log.v(TAG, "--------> EXCESSÃO:" + e);
                e.printStackTrace();
            }
        }
    }
}

vlwww

Para quem passar pelo mesmo problema que eu, eis a solução:

package org.me.gustavoandroid;

import android.app.ListActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import java.io.DataInputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

public class SincronizarServidor extends ListActivity {
    private List lista=new ArrayList();
    private Handler manipulador = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            atualiza();
        }

    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.atualiza();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menufazconexaoweb, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.mnFazConexao:
                Thread t = new Thread(new ConexaoWWW());
                t.start();
                return true;
            default:
                return super.onContextItemSelected(item);
        }
    }

    private void atualiza() {
        setListAdapter(new ArrayAdapter(this, R.layout.fazconexaoweb, this.lista));
    }

    private class ConexaoWWW implements Runnable {

        public void run() {
            try {
                URL urlObj = new URL("http://172.28.95.67:8080/Gustavo-Android-Servlet/Servidor");
                HttpURLConnection httpConn = (HttpURLConnection) urlObj.openConnection();
                httpConn.setDoInput(true);
                httpConn.setDoOutput(true);
                httpConn.setUseCaches(false);
                httpConn.setRequestMethod("POST");
                httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                httpConn.setRequestProperty("Content-Language", "pt-BR");
                httpConn.setRequestProperty("Accept", "application/octet-stream");
                httpConn.setRequestProperty("Connection", "close");
                OutputStream os = httpConn.getOutputStream();
                os.write("acao=CONECTOU AO SERVLET!!!".getBytes());
                os.close();
                String msg = httpConn.getResponseMessage();
                int code = httpConn.getResponseCode();
                if (code == 200) {
                    DataInputStream dis = new DataInputStream(httpConn.getInputStream());
                    String leitura = null;
                   // lista = new ArrayList();
                    do {
                        leitura = dis.readUTF();
                        if (!"#Encerra leitura#".equals(leitura)) {
                            Log.i(SincronizarServidor.class.getName(), String.format("Leitura: %s", leitura));
                            lista.add(leitura);
                        }
                    } while (!"#Encerra leitura#".equals(leitura) && leitura != null);
                    manipulador.sendEmptyMessage(0);
                    dis.close();
                } else {
                    Log.i(SincronizarServidor.class.getName(), String.format("Código invalido:: %s", msg));
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }
}

e o meu servlet


import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "Servidor", urlPatterns = {"/Servidor"})
public class Servidor extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("INICIOU CONEXÃO");
        resp.setContentType("text/plain;charset=UTF-8");
        String variavel = req.getParameter("acao");
        System.out.println("Param: " + variavel);
        OutputStream out = resp.getOutputStream();
        DataOutputStream dos = new DataOutputStream(out);
        dos.writeUTF("elemento que veio:" + variavel);
        dos.writeUTF("\ntexto");
        dos.close();
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    public String getServletInfo() {
        return "Short description";
    }

    private void processRequest(HttpServletRequest request, HttpServletResponse response) {
        throw new UnsupportedOperationException("Not yet implemented");
    }
}

feito!