Funciona no Emulador mas não funciona no SmartPhone
4 respostas
j.silvestre
olá pessoal
Estou brincando com o android, estou fazendo um cliente/servidor, eu quero enviar uma resposta do cliente para o servidor e pegra a resposta do servidor. No emulador funciona, mas quando testo no android ele não funciona, quando tento criar o socket ocorre um shutdown da VM. Estou testando com o sdk e o galaxy S4, o crash ocorre na hora de cria o socket. Alguém tem alguma idéia ?
No emulador funciona…
importjava.io.DataInputStream;importjava.io.DataOutputStream;importjava.io.IOException;importjava.net.Socket;importjava.net.UnknownHostException;importandroid.util.Log;publicclassCliente{publicStringtexto;privatestaticfinalStringCATEGORIA="Debug";privateSocketsocket;privateDataOutputStreamout;privateDataInputStreamin;publicCliente(Stringip,intporta){Log.i(CATEGORIA,"conectando no socket "+ip+"porta "+porta);try{socket=newSocket(ip,porta);Log.i(CATEGORIA,"passo 1");}catch(UnknownHostExceptione){Log.i(CATEGORIA,"UnknownHostException");e.printStackTrace();}catch(IOExceptione){Log.i(CATEGORIA,"IOException");e.printStackTrace();}try{out=newDataOutputStream(socket.getOutputStream());}catch(IOExceptione){// TODO Auto-generated catch blocke.printStackTrace();}try{in=newDataInputStream(socket.getInputStream());}catch(IOExceptione){// TODO Auto-generated catch blocke.printStackTrace();}Log.i(CATEGORIA,"Conexão realizada com sucesso..");}publicStringPerguntarServer(Stringpergunta){Stringresposta="";Log.i(CATEGORIA,"Enviado dados ao servidor "+"[ "+pergunta+" ]");try{out.writeChars(pergunta);}catch(IOExceptione){// TODO Auto-generated catch blocke.printStackTrace();}try{out.flush();}catch(IOExceptione){// TODO Auto-generated catch blocke.printStackTrace();}Log.i(CATEGORIA,"Aguardando resposta do servidor ");try{resposta=in.readLine();}catch(IOExceptione){// TODO Auto-generated catch blocke.printStackTrace();}Log.i(CATEGORIA,"Dados Recebidos do Servidor "+"[ "+resposta);try{out.close();in.close();socket.close();}catch(IOExceptione){}returnresposta;}publicvoidsetTexto(Stringtext){this.texto=text;}publicStringgetTexto(){returntexto;}}
Se no Emulador vc tiver testando usar versões abaixo do 3.0 o seu problema está em executar tarefas que tenham conexão com a internet sem utilizar uma Thread secundaria ou implementar uma AsyncTask(ambos parecidos) pois o S4 roda com certeza uma versão do Android acima da API 11 ou 3.0
Isso ocorre pq o Google implementou a partir desta versão uma politica de segurança que impede a conexão com a internet dentro da Thread de interface grafica.
Espero ter ajudado.
Aqui no GUJ tem varios posts com exemplos e respostas com relação a essa questão.
Até
j.silvestre
lucas93lange:
Se no Emulador vc tiver testando usar versões abaixo do 3.0 o seu problema está em executar tarefas que tenham conexão com a internet sem utilizar uma Thread secundaria ou implementar uma AsyncTask(ambos parecidos) pois o S4 roda com certeza uma versão do Android acima da API 11 ou 3.0
Isso ocorre pq o Google implementou a partir desta versão uma politica de segurança que impede a conexão com a internet dentro da Thread de interface grafica.
Espero ter ajudado.
Aqui no GUJ tem varios posts com exemplos e respostas com relação a essa questão.
Até
Lucas era isso mesmo. tive que implementar uma AsyncTask.
sds
j.silvestre
A
Alan_Carvalho
Olá pessoal, sou novo aqui no fórum.
Também estou com um problema "parecido". Meu app roda perfeitamente no Emulador, porém quando instalo no Aparelho algumas coisas dão erro.
O que acontece, estou trabalhando com vários xml, consigo iniciar o app normalmente chamar algumas activity, mas algumas das vezes ocorre do app parar de funcionar, por exemplo, eu chamo uma actvity, depois chamo outra, quando vou chamar outra o app para. Já tentei muitas coisas, porém não encontrei o problema.
Vou mandar dois dos xml, e seus respectivos main, onde o erro acontece.
packagecom.example.lebebe;importandroid.app.Activity;importandroid.content.Intent;importandroid.media.MediaPlayer;importandroid.os.Bundle;importandroid.view.View;importandroid.view.Window;importandroid.view.WindowManager;importandroid.widget.Button;importandroid.widget.Toast;publicclasssilabasextendsActivity{Buttonbba,bbe,bbi,bbo,bbu,bca,bce,bci,bco,bcu,bda,bde,bdi,bdo,bdu,bfa,bfe,bfi,bfo,bfu;Buttonbb,bc,bd,bf,bg,bj,bk,bl,bm,bn,bp,br,bs,bt,bv,bx,bz,bcom,bsem,bvoltar,bcolecao;Viewescolha;Viewletrab,letrac,letrad,letraf;MediaPlayervoltar=null,silabas=null,qcaudio=null;intauxmenu=0;Intentit;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);setContentView(R.layout.silabas);bcolecao=(Button)findViewById(R.id.bcolecao);escolha=(View)findViewById(R.id.escolha);bcolecao.setVisibility(View.GONE);escolha.setVisibility(View.VISIBLE);bvoltar=(Button)findViewById(R.id.bvoltar);bba=(Button)findViewById(R.id.bba);bca=(Button)findViewById(R.id.bca);bda=(Button)findViewById(R.id.bda);bfa=(Button)findViewById(R.id.bfa);bbe=(Button)findViewById(R.id.bbe);bce=(Button)findViewById(R.id.bce);bde=(Button)findViewById(R.id.bde);bfe=(Button)findViewById(R.id.bfe);bbi=(Button)findViewById(R.id.bbi);bci=(Button)findViewById(R.id.bci);bdi=(Button)findViewById(R.id.bdi);bfi=(Button)findViewById(R.id.bfi);bbo=(Button)findViewById(R.id.bbo);bco=(Button)findViewById(R.id.bco);bdo=(Button)findViewById(R.id.bdo);bfo=(Button)findViewById(R.id.bfo);bbu=(Button)findViewById(R.id.bbu);bcu=(Button)findViewById(R.id.bcu);bdu=(Button)findViewById(R.id.bdu);bfu=(Button)findViewById(R.id.bfu);letrab=(View)findViewById(R.id.letrab);letrac=(View)findViewById(R.id.letrac);letrad=(View)findViewById(R.id.letrad);letraf=(View)findViewById(R.id.letraf);bcom=(Button)findViewById(R.id.bcom);bsem=(Button)findViewById(R.id.bsem);bcom.setVisibility(View.VISIBLE);bsem.setVisibility(View.GONE);letrab.setVisibility(View.GONE);letrac.setVisibility(View.GONE);letrad.setVisibility(View.GONE);letraf.setVisibility(View.GONE);Toast.makeText(this,"Coleção silábica",Toast.LENGTH_LONG).show();//Inicializa variável de controleauxmenu=1;//Condição baseada na variável de controle "auxmenu", para verificar se o áudio do menu deve ser iniciado.if(auxmenu==1){silabas=MediaPlayer.create(silabas.this,R.raw.somsilabas);silabas.setOnCompletionListener(newMediaPlayer.OnCompletionListener()//Função para não sobrecarregar a variável de reprodução{publicvoidonCompletion(MediaPlayersilabas){//"Liberar espaço do sistema, e repetir a música enquanto estiver no menu.silabas.start();}});silabas.start();}}publicvoidmp(){qcaudio=MediaPlayer.create(silabas.this,R.raw.qcaudio);qcaudio.setOnCompletionListener(newMediaPlayer.OnCompletionListener()//Função para não sobrecarregar a variável de reprodução{publicvoidonCompletion(MediaPlayerqcaudio){//"Liberar espaço do sistema.qcaudio.stop();qcaudio.release();qcaudio=null;}});qcaudio.start();}publicvoidbb(Viewv){escolha.setVisibility(View.GONE);letrab.setVisibility(View.VISIBLE);bcolecao.setVisibility(View.VISIBLE);}publicvoidbc(Viewv){escolha.setVisibility(View.GONE);letrac.setVisibility(View.VISIBLE);bcolecao.setVisibility(View.VISIBLE);}publicvoidbd(Viewv){escolha.setVisibility(View.GONE);letrad.setVisibility(View.VISIBLE);bcolecao.setVisibility(View.VISIBLE);}publicvoidbf(Viewv){escolha.setVisibility(View.GONE);letraf.setVisibility(View.VISIBLE);bcolecao.setVisibility(View.VISIBLE);}publicvoidbcolecao(Viewv){it=newIntent(silabas.this,silabas.class);startActivity(it);finish();}publicvoidbg(Viewv){it=newIntent(silabas.this,silabas2.class);Bundleparams=newBundle();params.putChar("msg",'g');it.putExtras(params);startActivity(it);finish();}publicvoidbj(Viewv){it=newIntent(silabas.this,silabas2.class);Bundleparams=newBundle();params.putChar("msg",'j');it.putExtras(params);startActivity(it);finish();}publicvoidbk(Viewv){it=newIntent(silabas.this,silabas2.class);Bundleparams=newBundle();params.putChar("msg",'k');it.putExtras(params);startActivity(it);finish();}publicvoidbl(Viewv){it=newIntent(silabas.this,silabas2.class);Bundleparams=newBundle();params.putChar("msg",'l');it.putExtras(params);startActivity(it);finish();}publicvoidbm(Viewv){it=newIntent(silabas.this,silabas3.class);Bundleparams=newBundle();params.putChar("msg",'m');it.putExtras(params);startActivity(it);finish();}publicvoidbn(Viewv){it=newIntent(silabas.this,silabas3.class);Bundleparams=newBundle();params.putChar("msg",'n');it.putExtras(params);startActivity(it);finish();}publicvoidbp(Viewv){it=newIntent(silabas.this,silabas3.class);Bundleparams=newBundle();params.putChar("msg",'p');it.putExtras(params);startActivity(it);finish();}publicvoidbr(Viewv){it=newIntent(silabas.this,silabas3.class);Bundleparams=newBundle();params.putChar("msg",'r');it.putExtras(params);startActivity(it);finish();}publicvoidbs(Viewv){it=newIntent(silabas.this,silabas4.class);Bundleparams=newBundle();params.putChar("msg",'s');it.putExtras(params);startActivity(it);finish();}publicvoidbt(Viewv){it=newIntent(silabas.this,silabas4.class);Bundleparams=newBundle();params.putChar("msg",'t');it.putExtras(params);startActivity(it);finish();}publicvoidbv(Viewv){it=newIntent(silabas.this,silabas4.class);Bundleparams=newBundle();params.putChar("msg",'v');it.putExtras(params);startActivity(it);finish();}publicvoidbx(Viewv){it=newIntent(silabas.this,silabas4.class);Bundleparams=newBundle();params.putChar("msg",'x');it.putExtras(params);startActivity(it);finish();}publicvoidbz(Viewv){it=newIntent(silabas.this,silabas4.class);Bundleparams=newBundle();params.putChar("msg",'z');it.putExtras(params);startActivity(it);finish();}publicvoidbcom(Viewv){bcom.setVisibility(View.GONE);bsem.setVisibility(View.VISIBLE);silabas.release();silabas=null;auxmenu=0;}publicvoidbsem(Viewv){bsem.setVisibility(View.GONE);bcom.setVisibility(View.VISIBLE);auxmenu=1;if(auxmenu==1){silabas=MediaPlayer.create(silabas.this,R.raw.somsilabas);silabas.setOnCompletionListener(newMediaPlayer.OnCompletionListener()//Função para não sobrecarregar a variável de reprodução{publicvoidonCompletion(MediaPlayersilabas){//"Liberar espaço do sistema, e repetir a música enquanto estiver no menu.silabas.start();}});silabas.start();}}publicvoidbvoltar(Viewv){voltar=MediaPlayer.create(silabas.this,R.raw.voltando);voltar.setOnCompletionListener(newMediaPlayer.OnCompletionListener()//Função para não sobrecarregar a variável de reprodução{publicvoidonCompletion(MediaPlayervoltar){//"Liberar espaço do sistema.voltar.stop();voltar.release();voltar=null;}});voltar.start();if(auxmenu==1){silabas.release();silabas=null;auxmenu=0;}it=newIntent(silabas.this,MainActivity.class);Bundleparams=newBundle();params.putChar("msg",'s');it.putExtras(params);startActivity(it);finish();}}
packagecom.example.lebebe;importandroid.app.Activity;importandroid.content.Intent;importandroid.media.MediaPlayer;importandroid.os.Bundle;importandroid.view.View;importandroid.view.Window;importandroid.view.WindowManager;importandroid.widget.Button;publicclassfrutasextendsActivity{Buttonbuva,blaranja,bmaca,bbanana,bcaju,bpera,bcom,bsem,bvoltar;MediaPlayervoltar=null,frutas=null,somaca=null,sombanana=null,sompera=null,somuva=null,somcaju=null,somlaranja=null,qcaudio=null;intauxmenu=0;Intentit;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);setContentView(R.layout.frutas);bvoltar=(Button)findViewById(R.id.bvoltar);buva=(Button)findViewById(R.id.buva);blaranja=(Button)findViewById(R.id.blaranja);bmaca=(Button)findViewById(R.id.bmaca);bbanana=(Button)findViewById(R.id.bbanana);bcaju=(Button)findViewById(R.id.bcaju);bpera=(Button)findViewById(R.id.bpera);bcom=(Button)findViewById(R.id.bcom);bsem=(Button)findViewById(R.id.bsem);bcom.setVisibility(View.VISIBLE);bsem.setVisibility(View.GONE);//Inicializa variável de controleauxmenu=1;//Condição baseada na variável de controle "auxmenu", para verificar se o áudio do menu deve ser iniciado.if(auxmenu==1){frutas=MediaPlayer.create(frutas.this,R.raw.somfrutas);frutas.setOnCompletionListener(newMediaPlayer.OnCompletionListener()//Função para não sobrecarregar a variável de reprodução{publicvoidonCompletion(MediaPlayerfrutas){//"Liberar espaço do sistema, e repetir a música enquanto estiver no menu.frutas.start();}});frutas.start();}}publicvoidmp(){qcaudio=MediaPlayer.create(frutas.this,R.raw.qcaudio);qcaudio.setOnCompletionListener(newMediaPlayer.OnCompletionListener()//Função para não sobrecarregar a variável de reprodução{publicvoidonCompletion(MediaPlayerqcaudio){//"Liberar espaço do sistema.qcaudio.stop();qcaudio.release();qcaudio=null;}});qcaudio.start();}publicvoidbuva(Viewv){mp();somuva=MediaPlayer.create(frutas.this,R.raw.somuva);somuva.setOnCompletionListener(newMediaPlayer.OnCompletionListener()//Função para não sobrecarregar a variável de reprodução{publicvoidonCompletion(MediaPlayersomuva){//"Liberar espaço do sistema.somuva.stop();somuva.release();somuva=null;}});somuva.start();}publicvoidbbanana(Viewv){mp();sombanana=MediaPlayer.create(frutas.this,R.raw.sombanana);sombanana.setOnCompletionListener(newMediaPlayer.OnCompletionListener()//Função para não sobrecarregar a variável de reprodução{publicvoidonCompletion(MediaPlayersombanana){//"Liberar espaço do sistema.sombanana.stop();sombanana.release();sombanana=null;}});sombanana.start();}publicvoidbmaca(Viewv){mp();somaca=MediaPlayer.create(frutas.this,R.raw.somaca);somaca.setOnCompletionListener(newMediaPlayer.OnCompletionListener()//Função para não sobrecarregar a variável de reprodução{publicvoidonCompletion(MediaPlayersomaca){//"Liberar espaço do sistema.somaca.stop();somaca.release();somaca=null;}});somaca.start();}publicvoidblaranja(Viewv){mp();somlaranja=MediaPlayer.create(frutas.this,R.raw.somlaranja);somlaranja.setOnCompletionListener(newMediaPlayer.OnCompletionListener()//Função para não sobrecarregar a variável de reprodução{publicvoidonCompletion(MediaPlayersomlaranja){//"Liberar espaço do sistema.somlaranja.stop();somlaranja.release();somlaranja=null;}});somlaranja.start();}publicvoidbcaju(Viewv){mp();somcaju=MediaPlayer.create(frutas.this,R.raw.somcaju);somcaju.setOnCompletionListener(newMediaPlayer.OnCompletionListener()//Função para não sobrecarregar a variável de reprodução{publicvoidonCompletion(MediaPlayersomcaju){//"Liberar espaço do sistema.somcaju.stop();somcaju.release();somcaju=null;}});somcaju.start();}publicvoidbpera(Viewv){mp();sompera=MediaPlayer.create(frutas.this,R.raw.sompera);sompera.setOnCompletionListener(newMediaPlayer.OnCompletionListener()//Função para não sobrecarregar a variável de reprodução{publicvoidonCompletion(MediaPlayersompera){//"Liberar espaço do sistema.sompera.stop();sompera.release();sompera=null;}});sompera.start();}publicvoidbcom(Viewv){bcom.setVisibility(View.GONE);bsem.setVisibility(View.VISIBLE);frutas.release();frutas=null;auxmenu=0;}publicvoidbsem(Viewv){bcom.setVisibility(View.VISIBLE);bsem.setVisibility(View.GONE);auxmenu=1;if(auxmenu==1){frutas=MediaPlayer.create(frutas.this,R.raw.somfrutas);frutas.setOnCompletionListener(newMediaPlayer.OnCompletionListener()//Função para não sobrecarregar a variável de reprodução{publicvoidonCompletion(MediaPlayerfrutas){//"Liberar espaço do sistema, e repetir a música enquanto estiver no menu.frutas.start();}});frutas.start();}}publicvoidbvoltar(Viewv){voltar=MediaPlayer.create(frutas.this,R.raw.voltando);voltar.setOnCompletionListener(newMediaPlayer.OnCompletionListener()//Função para não sobrecarregar a variável de reprodução{publicvoidonCompletion(MediaPlayervoltar){//"Liberar espaço do sistema.voltar.stop();voltar.release();voltar=null;}});voltar.start();if(auxmenu==1){frutas.release();frutas=null;auxmenu=0;}it=newIntent(frutas.this,MainActivity.class);Bundleparams=newBundle();params.putChar("msg",'s');it.putExtras(params);startActivity(it);finish();}}
Não liguem para algumas bagunças do código, ainda estou otimizando algumas coisas, porém o que não entendo é que para os outros fiz exatamente a mesma coisa, com suas devidas colocações, lógico, mas o erro acontece somente aqui.
Me ajudem, obrigado desde já.
A
Alan_Carvalho
Pessoal eu refiz o código tirando o excesso de imagens que estava utilizando, porém o erro persistiu. Já tentei de quase tudo eu acho.
Tenho quase certeza que é problema com a chamada Intent, porém não sei o que precisa arrumar, para mim está tudo correto.