Saudações!
Gostaria que me ajudassem com um exemplo de HttpConnection em J2ME. O WTK 2.0 vem com exemplos mas não consigo visualizar a aplicação. Peguei um exemplo de código, mas não consigo rodar. O “build” é normal e compila normal. Vou deixar o código(que peguei na net) p/ vc’s verem. Quando clico no select vou em “buscar”, aí aparece no WTK a msg:
“Warning: To avoid potential deadlock, operations that may block, such as networking, should be performed in a different thread than the commandAction() handler.”
O que significa isso?
O que preciso para usar HttpConnection?Só o WTK 2.0 não é suficiente?
O código é:
import javax.microedition.lcdui.<em>;
import javax.microedition.midlet.</em>;
import <a href="http://javax.microedition.io">javax.microedition.io</a>.<em>;
import <a href="http://java.io">java.io</a>.</em>;
public class ConnectionImage extends MIDlet implements CommandListener
{
Display tela;
// form onde será exibida a imagem
Form imageForm;
// ImageItem onde a foto que virá do servidor será salva.
ImageItem foto;
// comandos
Command buscarCommand, sairCommand;
// string com a url para a imagem
// colocamos a url diretamente aqui somente para exemplo
// uma idéia seria vc deixar o usuario setar esse link
// em um textbox ou algo do genero.
String url = “<a href="http://localhost/Site/logo.png">http://localhost/Site/logo.png</a>”;
public ConnectionImage() {
this.imageForm = new Form("");
// imageItem onde será posta a imagem que vier do server
// inicializamos ela com zero.
// o qual poderia ser feito na hora de postar.
this.foto = new ImageItem(“foto”,null,0,"");
this.sairCommand = new Command(“Sair”, Command.EXIT, 0);
this.buscarCommand = new Command(“Buscar”, Command.SCREEN, 1);
this.imageForm.addCommand(this.sairCommand);
this.imageForm.addCommand(this.buscarCommand);
this.imageForm.setCommandListener(this);
}
public void startApp() {
this.tela = Display.getDisplay(this);
this.tela.setCurrent(this.imageForm);
}
public void pauseApp() {
}
public void destroyApp(boolean bool) {
}
public void commandAction(Command c, Displayable d) {
if (c == this.sairCommand)
{
this.destroyApp(true);
this.notifyDestroyed();
}
else if(c == buscarCommand)
{
// se já houver um ImageItem no form
// ele irá deleta-lo antes de jogar uma nova imagem
if (imageForm.size() > 0){
for (int i = 0; i < imageForm.size(); i++)
imageForm.delete(i);
}
try
{
Image im;
// chama o método que busca a imagem
im = getImage(this.url);
this.foto.setImage(im);
imageForm.append(this.foto);
// Display the form with the image
this.tela.setCurrent(imageForm);
}catch(Exception e)
{
}
}
}
/*--------------------------------------------------
* Abre uma conexão http e baixa um arquivo png
* em um array de bytes
<em>-------------------------------------------------</em>/
private Image getImage(String url) throws IOException
{
// usamos aqui ao invés de httpconnection
// a conexao padrao, o qual nao nos garante nada.
// embora a conexao http tambem nao seja muito confiavel.
ContentConnection connection = (ContentConnection) Connector.open(url);
DataInputStream iStrm = connection.openDataInputStream();
Image im = null;
try
{
byte imageData[];
int length = (int) connection.getLength();
if (length != -1)
{
imageData = new byte[length];
// Le um png em um array
iStrm.readFully(imageData);
}
else //se o tamanho não está disponível
{
ByteArrayOutputStream bStrm = new ByteArrayOutputStream();
int ch;
while ((ch = iStrm.read()) != -1)
bStrm.write(ch);
imageData = bStrm.toByteArray();
bStrm.close();
}
// Cria a imagem de um array de bytes
im = Image.createImage(imageData, 0, imageData.length);
}
finally
{
// Clean up
if (iStrm != null)
iStrm.close();
if (connection != null)
connection.close();
}
return (im == null ? null : im);
}
}
Grato pela atenção!
Wellington Candeia