Sincronização de Thread

5 respostas
guisantogui

Olá Pessoal, acho pouco provavel que alguém apareça aqui para responder isso o carnaval, mas mesmo assim vamos lá! =D

tenho o seguinte código:

public void catchToken(String username, String password) {
		
		final HttpClient client = new DefaultHttpClient();
		final HttpPost post = new HttpPost(URLAUTHENTICATION);
		
		post.addHeader("Content-type", "application/x-www-form-urlencoded");
		post.addHeader("Accept", "*/*");

		final List<NameValuePair> values = new ArrayList<NameValuePair>();
		values.add(new BasicNameValuePair("account[username]", username));
		values.add(new BasicNameValuePair("account[password]", password));
		
		new Thread(new Runnable() {
			
			public synchronized void run() {
				try {
					post.setEntity(new UrlEncodedFormEntity(values));
					HttpResponse response = client.execute(post);
					
					if (response.getStatusLine().getStatusCode() != 401) {
						InputStream stream = response.getEntity().getContent();
						token = new Scanner(stream).useDelimiter("\\A").next();		
					}
					else{
						token = "";	
					}
				} catch (ClientProtocolException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}).start();
	}

O metodo acima deve pegar um token meu servidor online passando parametros de autenticação depois vou retorná-lo com um simples metodo get, porem estou com um problema de sincronização, o get está sendo executado antes do meu metodo pegar o token no servidor, retornando assim um valor nulo.

Queria saber como devo fazer a thread que vai pegar o token obrigatóriamente antes do get que retorna-rá o valor!

Brigadão pessoal!

5 Respostas

fbl.lucas

Primeiramente qual o motivo para usar uma Thread? Assim ja não satisfaz?

public void catchToken(String username, String password) {  
          
        final HttpClient client = new DefaultHttpClient();  
        final HttpPost post = new HttpPost(URLAUTHENTICATION);  
          
        post.addHeader("Content-type", "application/x-www-form-urlencoded");  
        post.addHeader("Accept", "*/*");  
  
        final List<NameValuePair> values = new ArrayList<NameValuePair>();  
        values.add(new BasicNameValuePair("account[username]", username));  
        values.add(new BasicNameValuePair("account[password]", password));  
       
              
            synchronized(this) {  
                try {  
                    post.setEntity(new UrlEncodedFormEntity(values));  
                    HttpResponse response = client.execute(post);  
                      
                    if (response.getStatusLine().getStatusCode() != 401) {  
                        InputStream stream = response.getEntity().getContent();  
                        token = new Scanner(stream).useDelimiter("\\A").next();       
                    } else{  
                        token = "";   
                    }  
                } catch (ClientProtocolException e) {  
                    e.printStackTrace();  
                } catch (IOException e) {  
                    e.printStackTrace();  
                }  
            }   
}
FernandoFranzini

É só não fazer o http request numa thread separada!! kkkk
pq vc fez?

guisantogui

Isto é porque outra thread tem que ficar mostrando uma barra de progresso para a interface android!

ViniGodoy

Muito bem… isso definitivamente não é Java Básico.

guisantosgui, leia a lista dos fóruns e me diga: para onde devo mover esse tópico?
http://www.guj.com.br/forums/list.java

Seria para o fórum de Android?
Da próxima vez, procure postar no fórum certo, para evitar que o pessoal responda pensando que sua aplicação é web, desktop…

guisantogui

Bom acho que o de Android então, afinal o Java deve trabalhar de forma diferente na plataforma.

Criado 17 de fevereiro de 2012
Ultima resposta 22 de fev. de 2012
Respostas 5
Participantes 4