Conexão HTTP

2 respostas
C

Pessoal, Bom Dia! Tudo bem com todos? Espero que sim.
Estou tendo dificuldades em definir o local para adicionar a Thread e o método run no código abaixo… Alguém poderia me ajudar? Gostaria q a resposta fosse prática se possível e bem clara, pq estou aprendendo JME e estou algumas dificuldades com ele. Obrigada


/* ViewPng.java

  • Faz download e vê um arquivo png
  • Capítulo 14 - Estrutura de Conexão Genérica
  • Exemplo 14.1: Download e visualização da Imagem PNG
  • Livro Core JME Tecnologia & MIDP */
import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.InputStream;
import javax.microedition.io.Connector;

import javax.microedition.io.ContentConnection;

import javax.microedition.lcdui.Command;

import javax.microedition.lcdui.CommandListener;

import javax.microedition.lcdui.Display;

import javax.microedition.lcdui.Displayable;

import javax.microedition.lcdui.Form;

import javax.microedition.lcdui.Image;

import javax.microedition.lcdui.ImageItem;

import javax.microedition.lcdui.TextBox;

import javax.microedition.midlet.MIDlet;

import javax.microedition.midlet.MIDletStateChangeException;
public class ViewPng extends MIDlet implements CommandListener

{

private Display display;

private TextBox tb_main;

private Form f_VPng;

private Command c_exit;

private Command c_view;

private Command c_back;
public ViewPng()
{
	display = Display.getDisplay(this);
	tb_main = new TextBox("Digite a url", "http://www.corej2me.com/midpbook_v1e1/ch14/duke.png", 75, 0);
	c_exit = new Command("sair", Command.EXIT, 1);
	c_view = new Command("Ver", Command.SCREEN, 2);
	tb_main.addCommand(c_exit);
	tb_main.addCommand(c_view);
	tb_main.setCommandListener(this);
	f_VPng = new Form(" ");
	c_back = new Command("Voltar", Command.BACK, 1);
	f_VPng.addCommand(c_back);
	f_VPng.setCommandListener(this);
}

protected void destroyApp(boolean unconditional) throws MIDletStateChangeException { }

protected void pauseApp() { }

protected void startApp() throws MIDletStateChangeException
{
	display.setCurrent(tb_main);
}

public void commandAction(Command c, Displayable d)
{
	if(c == c_exit)
	{
		try { destroyApp(false); }
		catch (MIDletStateChangeException e) { e.printStackTrace(); }
		notifyDestroyed();
	}
	else if(c == c_view)
	{
		try
		{
			Image im;
			if((im = getImage(tb_main.getString())) != null)
			{
				ImageItem ii = new ImageItem(null, im, ImageItem.LAYOUT_DEFAULT, null);
				if(f_VPng.size() != 0)
					f_VPng.set(0, ii);
				else
					f_VPng.append(ii);
			}
			else
				f_VPng.append("download sem sucesso");
			display.setCurrent(f_VPng);
		}
		catch (Exception e) { System.err.println("Msg: " + e.toString()); }
	}
	else if(c == c_back)
			display.setCurrent(tb_main);
}

private Image getImage(String url) throws IOException
{
	ContentConnection connection = (ContentConnection) Connector.open(url);
	InputStream iStrm = connection.openInputStream();
	Image im = null;
	try
	{
		byte imageData[];
		int length = (int) connection.getLength();
		if (length != -1)
		{
			imageData = new byte[length];
			iStrm.read(imageData);
		}
		else
		{
			ByteArrayOutputStream bStrm = new ByteArrayOutputStream();
			int ch;
			while ((ch = iStrm.read()) != -1)
				bStrm.write(ch);
			imageData = bStrm.toByteArray();
			bStrm.close();
		}
		im = Image.createImage(imageData, 0, imageData.length);
	}
	finally
	{
		if(iStrm != null)
			iStrm.close();
		if(connection != null)
			connection.close();
	}
	return (im == null ? null : im);
}

}

2 Respostas

E

é simples, primeiro lá em cima onde tem:
implements CommandListener, Runnable

adicione o método run()

dentro desse método terá o código ou o método que faz efetivamente a conexao com a web.

acho que no seu caso é o getImage(str)

e a inicialização da thread ficará no action do command

ESPERO TER AJUDADO!

C

obrigada deu certo

Criado 5 de agosto de 2007
Ultima resposta 22 de ago. de 2007
Respostas 2
Participantes 2