Problema com HttpConnection  XML
Índice dos Fóruns » Google Android e Java Micro Edition (ME)
Autor Mensagem
boone
JWizard
[Avatar]

Membro desde: 21/09/2003 16:01:35
Mensagens: 2140
Offline

Olá,

Estou tendo sérios problemas com o uso do HttpConnection.

O código abaixo roda perfeitamente no emulador, só que nos celulares Siemens M50 e C55, problemas acontecem, ou seja, a aplicação não consegue abrir o Stream para leitura dos dados recebidos do servidor ou mesmo logo após eu usar OutputStream.write e close, dá erro no close.

Via o emulador, o servidor entende os dados enviados por POST e envia a resposta normalmente, sendo que a aplicação em si funciona mil-maravilhas...agora quando eu coloco no celular...xiii!

Qual é a abordagem correta para fazer a conexão http sem problemas ?
Meu problema principal é no processamento da resposta.
O servidor não seta o header Content-Length, portanto de antemão, não tenho como saber quantos bytes vou ler.
Os dados recebidos são strings..como processar corretamente ? Uso só InputStream ou DataInputStream ?
Este código está sendo executado em uma thread separada.
O que pode ser melhorado neste códi

This message was edited 1 time. Last update was at 21/05/2005 16:04:33

IvoD
Debugger
[Avatar]

Membro desde: 23/12/2002 20:16:32
Mensagens: 57
Offline

Caro Boone,
Com o meu celular eu tenho primeiro que conectar o GSM para depois iniciar os testes...
O seu celular esta conectado?
boone
JWizard
[Avatar]

Membro desde: 21/09/2003 16:01:35
Mensagens: 2140
Offline

Conectado ?

Ele está sempre, afinal, usa o GRPS.
Até existe um termo para isto (Always on) que descreve, dispositivos que estão sempre conectados a internet, seja um micro desktop via Speedy, seja um celular GSM,etc...

Eu não tenho problemas na conexão, postagem de parâmetros e início do recebimento dos dados.

O que acontece é que os dados que recebo, após um determinado período (coisa de segundos), faz me crer que fico preso no loop do método read(), pois a aplicação não consegue entender que não há mais nada para ser lido, ficando aguardando o servidor enviar dados que na verdade não existem mais para serem enviados.

Estou fazendo alguns testes, mas ainda não entendo porquê a conexão entra no while, mas não sai...e isto só acontece quando faz uma segunda conexão postando outros parâmetros e desta vez recebendo uma quantidade grande de dados.

Enfim, ainda estou na luta !
boone
JWizard
[Avatar]

Membro desde: 21/09/2003 16:01:35
Mensagens: 2140
Offline

Apenas para enriquecer a discussão:

Eventualmente a conexão se encerra normalmente.

Noto que isto acontece quando recebo poucos bytes, algo em torno de 900...Se eu receber mais do que istoa aplicação não sai mais do while...

Seria um problema na implementação MIDP do celular ?

Estou no meu script PHP setando o header "Content-Length" corretamente, para que a aplicação saiba que terá uns 4Kb para receber de dados.

Também já tentei usar o header "Connection: close", mas em nada ajudou.

No emulador roda que é uma beleza, não importa a quantidade de bytes que receberei do servidor, agora quando rodo no aparelho.....
jluizsc
Thread.start()
[Avatar]

Membro desde: 06/02/2005 23:38:26
Mensagens: 45
Offline

Ola,
Com o meu palm m105 e KVM da palm dah esse erro tb.. mensagem:

erro na transmissao:javax.microedition.io
ConnectionNotFoundException:The requested
protocol does not exist socket://meuip:8080

url sendo para acesso: http://meuip:8080/servlet/ccApl
o comando de acesso ao servlet funciona perfeitamente no IE e no POSE



mas no palm real, necas!! a rom do pose eh a mesma versao do palm

This message was edited 1 time. Last update was at 20/05/2005 21:15:17


__________________
Joao Luiz
Gratis eh pouco:
Explicacoes detalhadas
[WWW]
jluizsc
Thread.start()
[Avatar]

Membro desde: 06/02/2005 23:38:26
Mensagens: 45
Offline

Boone,
nao sei se isso vai te ajudar... nao tive tempo de ler seu codigo completamente, mas segue o q uso para ler os dados. AINDA nao deu problema:

private String ProcessaRespostaServidor(HttpConnection srv, InputStream iStrm) throws IOException {
String str = "";
int tamanho = (int) srv.getLength();
if (tamanho != -1) {
byte dados[] = new byte[tamanho];
iStrm.read(dados);
str = new String(dados);
} else {
ByteArrayOutputStream bStrm = new ByteArrayOutputStream();
int ch;
while ((ch = iStrm.read()) != -1)
bStrm.write(ch);
str = new String(bStrm.toByteArray());
bStrm.close();
}
return str;
}

falow

__________________
Joao Luiz
Gratis eh pouco:
Explicacoes detalhadas
[WWW]
 
Índice dos Fóruns » Google Android e Java Micro Edition (ME)
Ir para:   
Powered by JForum 2.1.8 © JForum Team