Problema com thread

Pessoal eu simplesmente quero que quando abra a tela, me de um Toast

public class Lista extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.lista);
		
		carregaLista();
	}

	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		carregaLista();
	}
	private void carregaLista(){
		new Thread(){
			public void run(){
				Toast.makeText(Lista.this, "to vivo", Toast.LENGTH_LONG).show();
			}
		}.start();
	}
}

mas quando eu clico no botao para ir pra tela de Listar fecha automaticamente

Você precisa colocar esse Toast em um Handler, aqui no GUJ tem um tópico falando sobre isso, porém não encontrei.

tentei com isso

final Handler mHandler = new Handler();
final Runnable mUpdateResults = new Runnable() {
    public void run() {
        Toast(this, message, duration).show();
    }

new Thread() {
    public void run() {
        mHandler.post(mUpdateResults);
    }
}.start();

mas parece que nao existe a classe Handler…
[nao tinha visto o comentario antes de postar]

eu estava tentando colocar o codigo dentro do onCreate() dai nao estava funcionando misteriosamente. Porém olhe como ficou

public class Lista extends Activity {
	private List<Produto> lista;
	final Handler mHandler = new Handler();
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.lista);
		
		carregaLista();// como eu posso chamar o tal mUpdateResults?
	}
	
	final Runnable mUpdateResults = new Runnable() {
	    public void run() {
	        Toast(this, "Mensagem", Toast.LENGTH_LONG).show();
	    }//parece que falta algo aqui. mas nao é start();

	new Thread() {
	    public void run() {
	        mHandler.post(mUpdateResults);
	    }
	}.start();
	}
	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		carregaLista();
	}
	private void carregaLista(){
		new Thread(){
			public void run(){
				Toast.makeText(Lista.this, "to vivo", Toast.LENGTH_LONG).show();
			}
		}.start();
	}
}

Tenta assim:

final Handler mHandler = new Handler() {
	@Override
	public void handleMessage(Message msg) {
		Toast(SuaActivity.this, message, duration).show();
	}
};

 
new Thread() {  
    public void run() {  
        mHandler.sendMessage(new Message());   
    }  
}.start(); 

rs que bizarro, estou com problemas com abrir e fechar chaves, ele precisa ficar aonde? posta o codigo inteiro, eu coloco fora do onCreate começa a funcionar mas tem que fechar chave e quando eu fecho continua dando o mesmo erro acusando de um “;”

dai eu coloquei o ; volta a falar da chave.

Não posso por que o código é da empresa que trabalho rs

estou falando do meu código ele ja tem tudo la dentro, o oncreate e tudo mais, só quero um toast mas esse handler ta embaçado kkk

lembrando que o handler tem que ser declarado no inicio da activity:

[code]
Public class MinhaActivity extends Activity {
private Handler handler;

}

olha como ficou

public class Lista extends Activity {
	
	private List<Produto> lista;
	final Handler mHandler = new Handler();  
	final Runnable mUpdateResults = new Runnable() {  
	    public void run() {  
	        Toast(this, message, duration).show();  
	    
	  
	new Thread() {  
	    public void run() {  
	        mHandler.post(mUpdateResults);  
	    }  
	}.start();
	}

	
	String url = "www.enginesystem.com.br/android/";
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.lista);
		carregaLista();
	}
	
	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		carregaLista();
	}
	private void carregaLista(){
		new Thread(){
			public void run(){
				Toast.makeText(Lista.this, "to vivo", Toast.LENGTH_LONG).show();
			}
		}.start();
	}
	private void carregaLista2() {
		// TODO Auto-generated method stub
		ListView listaDeProdutos = (ListView) findViewById(R.id.listaDeProdutos);
		ProdutoDAO dao = new ProdutoDAO(Lista.this);
		lista = dao.getLista();
		ArrayAdapter<Produto> adapter = new ArrayAdapter<Produto>(this,
				android.R.layout.simple_list_item_1, lista);
		listaDeProdutos.setAdapter(adapter);
	}
}

Posta seu código.

postei no comentario acima

[code]
public class Lista extends Activity {

private List<Produto> lista;  
final Handler mHandler = new Handler();    

  
String url = "www.enginesystem.com.br/android/";  
  
@Override  
protected void onCreate(Bundle savedInstanceState) {  
    // TODO Auto-generated method stub  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.lista);  
    mHandler = new Handler() {  
    @Override  
      public void handleMessage(Message msg) {  
        Toast.makeText(Lista.this, "to vivo", Toast.LENGTH_LONG).show();  
      }  
    };  
    carregaLista();  
}  
  
@Override  
protected void onResume() {  
    // TODO Auto-generated method stub  
    super.onResume();  
    carregaLista();  
}  
private void carregaLista(){  
    new Thread(){  
        public void run(){
            mHandler.sendMessage(new Message());    
            
        }  
    }.start();  
}  
private void carregaLista2() {  
    // TODO Auto-generated method stub  
    ListView listaDeProdutos = (ListView) findViewById(R.id.listaDeProdutos);  
    ProdutoDAO dao = new ProdutoDAO(Lista.this);  
    lista = dao.getLista();  
    ArrayAdapter<Produto> adapter = new ArrayAdapter<Produto>(this,  
            android.R.layout.simple_list_item_1, lista);  
    listaDeProdutos.setAdapter(adapter);  
}  

} [/code]

ok, agora eu tentei usar thread para resolver um pequeno problema que eu tinha, que quando eu ia buscar um JSON no site www.enginesystem.com.br/android/

a tela fechava.

o codigo ficou assim

	private void carregaLista() {
		new Thread() {
			public void run() {
				ListView listaDeProdutos = (ListView) findViewById(R.id.listaDeProdutos);
				String json = new WebClient("www.enginesystem.com.br/android/")
						.get();
				lista = new ProdutoConverter().listFromJson(json);
				ArrayAdapter<Produto> adapter = new ArrayAdapter<Produto>(
						Lista.this, android.R.layout.simple_list_item_1, lista);
				listaDeProdutos.setAdapter(adapter);
			}
		}.start();
	}

essa é a converter

public class ProdutoConverter {
	public List<Produto> listFromJson(String jsonDosProdutos) {
		GsonBuilder builder = new GsonBuilder();
		Gson gson = builder.create();

		Type listType = new TypeToken<List<Produto>>() {
		}.getType();
		List<Produto> produtos = gson.fromJson(jsonDosProdutos, listType);
		return produtos;
	}
}

E a classe WebClient

public class WebClient {
	private final String url;

	public WebClient(String url) {
		this.url = url;
	}
	public String get() {
		try {
			DefaultHttpClient httpClient = new DefaultHttpClient();  
            HttpGet get = new HttpGet(url);  
            get.setHeader("Accept", "application/json");  
            get.setHeader("Content-type", "application/json");  
            HttpResponse response = httpClient.execute(get);  
            String jsonDeResposta = EntityUtils.toString(response.getEntity());
            return jsonDeResposta;
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}
}

Rapaz, acho que agora o problema é no retorno do JSON, e não com a thread em si, o Webservice foi feito com que ? Java ?

php. mas parece que funciona sim, pois nao mudei nada de quando “funcionava”

codigo

<?php 
header('Content-type: application/json') 
?>
<?php
    include "mysqlconecta.php";
// Conecta ao banco de dados
    include "mysqlexecuta.php";
// Executa a cláusula SQL

    //Executa a consulta
    $sql = "SELECT * FROM tabela";
    $res = mysqlexecuta($id,$sql);
?>
<?
   //Exibe as linhas encontradas na consulta
   while ($row = mysql_fetch_array($res,MYSQL_ASSOC)) {
	$total[] = $row;
 }
 echo json_encode($total);
?>

e por que deixou de funcionar ? rs

meu simplesmente nao sei…
ja estava funcionando esse negocio, eu achei que do jeito simples da thread funcionaria… pois estava funcionando.

Mas para que você precisa da thread ? Acho que dá pra fazer sem ela.