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);
}
}
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.