Problema com classe thread que envia socket - Android [Resolvido]

possoal,

a ideia do aplicarivo é pegar a posição do GPS do celular e enviar para um servidor na web, e esse servidor redistribui as posições do GPS para outros celulares que tenham o mesmo aplicativo, seguindo uma determinada loogica de negocio…

o meu problema esta em criar uma conexao tcp com o servidor… se eu retiro a conexao com o servidor, o programa roda corretamente…

[code]classe principal:

public class UseGps extends Activity
{

TcpEnviaPanicoController enviaPanico = new TcpEnviaPanicoController("localhost",2011);
TcpOuvePanicoController ouvePanico = new TcpOuvePanicoController("localhost",2012);

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ouvePanico.start();
LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
LocationListener mlocListener = new MyLocationListener();
mlocManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, mlocListener);
}

/* Class My Location Listener */

public class MyLocationListener implements LocationListener
{

@Override
public void onLocationChanged(Location loc)
{
	//Toast.makeText( getApplicationContext(),ouvePanico.getName(),Toast.LENGTH_LONG).show();	

	loc.getLatitude();
	loc.getLongitude();		
	//enviaPanico.setComando(" Latitude = " + loc.getLatitude() + "Longitude = " + loc.getLongitude());
	String Text = "Minha posição geografica é: " + "Latitude = " + loc.getLatitude() + "Longitude = " + loc.getLongitude();
	Toast.makeText( getApplicationContext(),Text,Toast.LENGTH_LONG).show();	
}

@Override
public void onProviderDisabled(String provider)
{
	Toast.makeText( getApplicationContext(),"Gps Disabled",Toast.LENGTH_SHORT ).show();
}

@Override
public void onProviderEnabled(String provider)
{
	Toast.makeText( getApplicationContext(),"Gps Enabled",Toast.LENGTH_SHORT).show();
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras)
{
}

}

} [/code]

classe TcpOuvePanicoController:


import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import br.com.teste.panico.cilentes.TransmissorPanico;


public class TcpOuvePanicoController  extends Thread 
{
	private int porta;
	private String ip; 
    private Socket clientSocket;
    private BufferedReader inFromServer;
    private DataOutputStream outToServer;
    private static TransmissorPanico transmissorPanico;
    private static boolean leituraPermitida;   
     
		
	public TcpOuvePanicoController (String ip,int porta)
	{
		try
		{
			setPorta (porta);
			setIp(ip);
			conectar(); // aqui ja da pau... o emulador trava e nao exibe a mensagem de hello world
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
	
	public void run ()
	{
		try
		{			
			while (true)
			{
				ouvirPanico ();
				sleep(30000);				
			}
				
		}
		catch (Exception e)
		{
			try {
				clientSocket.close();
			} catch (IOException e1) {			
				e1.printStackTrace();
			}
			e.printStackTrace();
		}
	}
	
	public void conectar () throws IOException
	{	
	       clientSocket = new Socket(ip, porta);
		   outToServer =  new DataOutputStream(clientSocket.getOutputStream());
		   inFromServer =  new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));    	
		  
    }
	
	public void ouvirPanico () throws IOException
	{	
		      System.out.println("_________________________ conectou");
		      leituraPermitida = false;
			  outToServer.write(1);
			  transmissorPanico = new TransmissorPanico ();
			  transmissorPanico.setNome("walter");
	          transmissorPanico = TransmissorPanico.toTransmissorPanico(inFromServer);
			  leituraPermitida = true;			
	}
	
	
	
	
	

	public int getPorta() {
		return porta;
	}

	public void setPorta(int porta) {
		this.porta = porta;
	}



	public String getIp() {
		return ip;
	}

	public void setIp(String ip) {
		this.ip = ip;
	}

	public static TransmissorPanico getTransmissorPanico() {
		return transmissorPanico;
	}

	public static boolean isLeituraPermitida() {
		return leituraPermitida;
	}
	

	
}

AndroidManifest.xml:

[code]

<?xml version="1.0" encoding="utf-8"?>

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".UseGps"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

</application>

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission> 

[/code]

alguem pode me ajudar? tenho que conseguir pelo menos essa conexao ate amanhaa a noite!

Acredito que você esteja tendo problemas conceituais. No Android para trabalhar com Threads você deve usar a classe Looper.

E como os seus serviços são…serviços, acredito que você deveria estar usando Service.

Activities são apenas para exibir/interagir com o usuário, não para rodar coisas em background.

Pode-se usar threads no android do mesmo jeito que se usa no java, exceto para interagir com UI.

Mas no código do sarkozy, ele declare a thread enviapanico, mas não dá start nela, não posso dizer mais nada,
não foi postada a classe envia panico e nem onde está a linha que dá o problema.

descupa,

o problema esta no momento de criar a conecção com o servidor:

erro:

[code]05-25 00:40:32.824: WARN/System.err(377): java.net.ConnectException: /127.0.0.1:2012 - Connection refused
05-25 00:40:32.854: WARN/System.err(377): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:254)
05-25 00:40:32.864: WARN/System.err(377): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:219)
05-25 00:40:32.874: WARN/System.err(377): at java.net.Socket.startupSocket(Socket.java:781)
05-25 00:40:32.884: WARN/System.err(377): at java.net.Socket.tryAllAddresses(Socket.java:194)
05-25 00:40:32.884: WARN/System.err(377): at java.net.Socket.(Socket.java:258)
05-25 00:40:32.884: WARN/System.err(377): at java.net.Socket.(Socket.java:222)
05-25 00:40:32.894: WARN/System.err(377): at br.com.sofftware.panico.TcpOuvePanicoController.conectar(TcpOuvePanicoController.java:62)
05-25 00:40:32.904: WARN/System.err(377): at br.com.sofftware.panico.TcpOuvePanicoController.(TcpOuvePanicoController.java:30)
05-25 00:40:32.904: WARN/System.err(377): at br.com.sofftware.panico.UseGps.(UseGps.java:23)
05-25 00:40:32.914: WARN/System.err(377): at java.lang.Class.newInstanceImpl(Native Method)
05-25 00:40:32.914: WARN/System.err(377): at java.lang.Class.newInstance(Class.java:1429)
05-25 00:40:32.934: WARN/System.err(377): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
05-25 00:40:32.934: WARN/System.err(377): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
05-25 00:40:32.934: WARN/System.err(377): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
05-25 00:40:32.954: WARN/System.err(377): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
05-25 00:40:32.954: WARN/System.err(377): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
05-25 00:40:32.965: WARN/System.err(377): at android.os.Handler.dispatchMessage(Handler.java:99)
05-25 00:40:32.965: WARN/System.err(377): at android.os.Looper.loop(Looper.java:123)
05-25 00:40:32.974: WARN/System.err(377): at android.app.ActivityThread.main(ActivityThread.java:4627)
05-25 00:40:32.985: WARN/System.err(377): at java.lang.reflect.Method.invokeNative(Native Method)
05-25 00:40:32.985: WARN/System.err(377): at java.lang.reflect.Method.invoke(Method.java:521)
05-25 00:40:32.994: WARN/System.err(377): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-25 00:40:33.004: WARN/System.err(377): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-25 00:40:33.004: WARN/System.err(377): at dalvik.system.NativeStart.main(Native Method)
05-25 00:42:41.954: DEBUG/SntpClient(58): request time failed: java.net.SocketException: Address family not supported by protocol

[/code]

Pelo erro voce está tentando conectar no proprio android, java.net.ConnectException: /127.0.0.1:2012 - Connection refused.
Voce tem que fornecer o ip da maquina, mesmo se estiver executando no emulador.

soaresinfo , mto obrigado

era isso mesmo… eu tava colocando pra ele conectar com localhost , mas ai o android entende que eh pra conectar com o emulador… hhahahah

coloquei o ip real do meu pc no lugar de localhost e funcionou!

LOL