Implementando uma rede em dispositivos móveis
O pacote javax.microedition.io inclui suporte a rede baseado em Generic Connection Framework para MIDP.
A ilustração abaixo usa o protocolo HTTP para ler dados de uma URL.
|
<SPAN >//Lê o cabeçalho e os dados do HTTP </SPAN>
<B><SPAN >import </SPAN></B><SPAN >java.io.*;</SPAN>
<B><SPAN >import </SPAN></B><SPAN >javax.microedition.midlet.*;</SPAN>
<B><SPAN >import </SPAN></B><SPAN >javax.microedition.io.*;</SPAN>
<B><SPAN >import </SPAN></B><SPAN >javax.microedition.lcdui.*;</SPAN>
<B><SPAN >public class </SPAN></B><SPAN >httpMIDLET </SPAN><B><SPAN >extends </SPAN></B><SPAN >MIDlet </SPAN>
<SPAN >{</SPAN>
<SPAN > </SPAN><B><SPAN >private </SPAN></B><SPAN >Display display;</SPAN>
<SPAN > </SPAN><B><SPAN >private </SPAN></B><SPAN >String url = </SPAN><SPAN >"http://server/hello.txt"</SPAN><SPAN >;</SPAN>
<SPAN > </SPAN>
<SPAN > </SPAN><B><SPAN >public </SPAN></B><SPAN >httpMIDLET() </SPAN>
<SPAN > </SPAN><SPAN >{</SPAN>
<SPAN >display = Display.getDisplay(</SPAN><B><SPAN >this</SPAN></B><SPAN >);</SPAN>
<SPAN > </SPAN><SPAN >}</SPAN>
<SPAN > </SPAN><B><SPAN >public void </SPAN></B><SPAN >startApp() </SPAN>
<SPAN > </SPAN><SPAN >{</SPAN>
<SPAN >getData(url);</SPAN>
<SPAN > </SPAN><SPAN >}</SPAN>
<SPAN > </SPAN><B><SPAN >private void </SPAN></B><SPAN >getData(String url) </SPAN><B><SPAN >throws </SPAN></B><SPAN >IOException </SPAN>
<SPAN > </SPAN><SPAN >{</SPAN>
<SPAN >StringBuffer b = </SPAN><B><SPAN >new </SPAN></B><SPAN >StringBuffer();</SPAN>
<SPAN >InputStream is = </SPAN><B><SPAN >null</SPAN></B><SPAN >;</SPAN>
<SPAN >HttpConnection c = </SPAN><B><SPAN >null</SPAN></B><SPAN >;</SPAN>
<SPAN >TextBox t = </SPAN><B><SPAN >null</SPAN></B><SPAN >;</SPAN>
<B><SPAN >try </SPAN></B>
<SPAN >{</SPAN>
<B><SPAN >long </SPAN></B><SPAN >len = </SPAN><SPAN >0 </SPAN><SPAN >;</SPAN>
<B><SPAN >int </SPAN></B><SPAN >ch = </SPAN><SPAN >0</SPAN><SPAN >;</SPAN>
<SPAN >c = (HttpConnection)Connector.open(url);</SPAN>
<SPAN >is = c.openInputStream();</SPAN>
<SPAN >len =c.getLength();</SPAN>
<B><SPAN >if</SPAN></B><SPAN >( len != -</SPAN><SPAN >1</SPAN><SPAN >) </SPAN>
<SPAN >{</SPAN>
<SPAN >// Lê exatamente o Content-Length bytes</SPAN>
<B><SPAN >for</SPAN></B><SPAN >(</SPAN><B><SPAN >int </SPAN></B><SPAN >i =</SPAN><SPAN >0 </SPAN><SPAN >; i < len ; i++ )</SPAN>
<SPAN >{</SPAN>
<B><SPAN >if</SPAN></B><SPAN >((ch = is.read()) != -</SPAN><SPAN >1</SPAN><SPAN >) </SPAN>
<SPAN >{</SPAN>
<SPAN >b.append((</SPAN><B><SPAN >char</SPAN></B><SPAN >) ch);</SPAN>
<SPAN >}</SPAN>
<SPAN >}</SPAN>
<SPAN >} </SPAN>
<B><SPAN >else </SPAN></B>
<SPAN >{</SPAN>
<SPAN >//Lê até que a conexão é fechada.</SPAN>
<B><SPAN lang=EN-US >while </SPAN></B><SPAN lang=EN-US >((ch = is.read()) != -</SPAN><SPAN lang=EN-US >1</SPAN><SPAN lang=EN-US >) </SPAN>
<SPAN lang=EN-US >{</SPAN>
<SPAN lang=EN-US >len = is.available() ;</SPAN>
<SPAN lang=EN-US >b.append((</SPAN><B><SPAN lang=EN-US >char</SPAN></B><SPAN lang=EN-US >)ch);</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >t = </SPAN><B><SPAN lang=EN-US >new </SPAN></B><SPAN lang=EN-US >TextBox(</SPAN><SPAN lang=EN-US >"Http Data"</SPAN><SPAN lang=EN-US >,b.toString(), </SPAN><SPAN lang=EN-US >1024</SPAN><SPAN lang=EN-US >, </SPAN><SPAN lang=EN-US >0</SPAN><SPAN lang=EN-US >);</SPAN>
<SPAN lang=EN-US >}</SPAN>
<B><SPAN lang=EN-US >finally </SPAN></B>
<SPAN lang=EN-US >{</SPAN>
<SPAN lang=EN-US >is.close();</SPAN>
<SPAN lang=EN-US >c.close();</SPAN>
<SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >display.setCurrent(t);</SPAN>
<SPAN lang=EN-US > </SPAN><SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US > </SPAN>
<SPAN lang=EN-US > </SPAN><B><SPAN lang=EN-US >public void </SPAN></B><SPAN lang=EN-US >pauseApp() { }</SPAN>
<SPAN lang=EN-US > </SPAN><B><SPAN lang=EN-US >public void </SPAN></B><SPAN lang=EN-US >destroyApp(</SPAN><B><SPAN lang=EN-US >boolean </SPAN></B><SPAN lang=EN-US >unconditional) { }</SPAN>
<SPAN lang=EN-US >}</SPAN>
Abaixo do método post um pedido com alguns cabeçalhos e índices para o servidor.
<B><SPAN >public void </SPAN></B><SPAN >postHttpdata(Sring url) </SPAN><B><SPAN >throws </SPAN></B><SPAN >IOException </SPAN>
<SPAN >{</SPAN>
<SPAN > </SPAN><SPAN >HttpConnection c = </SPAN><B><SPAN >null</SPAN></B><SPAN >;</SPAN>
<SPAN > </SPAN><SPAN >OutputStream os = </SPAN><B><SPAN >null</SPAN></B><SPAN >;</SPAN>
<SPAN > </SPAN><B><SPAN >try </SPAN></B>
<SPAN > </SPAN><SPAN >{</SPAN>
<SPAN >c = (HttpConnection)Connector.open(url);</SPAN>
<SPAN >// Configura o método de pedido e os cabeçalhos</SPAN>
<SPAN lang=EN-US >c.setRequestMethod(HttpConnection.POST);</SPAN>
<SPAN lang=EN-US >c.setRequestProperty(</SPAN>
<SPAN lang=EN-US >"If-Modified-Since"</SPAN><SPAN lang=EN-US >,</SPAN><SPAN lang=EN-US >"7 Sep 2005 19:43:31 GMT"</SPAN><SPAN lang=EN-US >);</SPAN>
<SPAN lang=EN-US >c.setRequestProperty(</SPAN>
<SPAN lang=EN-US >"User-Agent"</SPAN><SPAN lang=EN-US >,</SPAN><SPAN lang=EN-US >"Profile/MIDP-1.0 Configuration/CLDC-1.0"</SPAN><SPAN lang=EN-US >);</SPAN>
<SPAN lang=EN-US >c.setRequestProperty(</SPAN>
<SPAN lang=EN-US >"Content-Language"</SPAN><SPAN lang=EN-US >, </SPAN><SPAN lang=EN-US >"en-US"</SPAN><SPAN lang=EN-US >);</SPAN>
<SPAN lang=EN-US >// Obtendo a saída </SPAN>
<SPAN lang=EN-US >os = c.openOutputStream();</SPAN>
<SPAN lang=EN-US >os.write(</SPAN><SPAN lang=EN-US >"How are you\n" </SPAN><SPAN lang=EN-US >+</FONT><SPAN > </SPAN>c.<SPAN >getBytes());</SPAN></FONT></SPAN>
<SPAN lang=EN-US >os.flush(); </SPAN>
<SPAN lang=EN-US > </SPAN><SPAN lang=EN-US >} </SPAN>
<SPAN lang=EN-US > </SPAN><B><SPAN lang=EN-US >finally </SPAN></B>
<SPAN lang=EN-US > </SPAN><SPAN lang=EN-US >{</SPAN>
<SPAN lang=EN-US >os.close();</SPAN>
<SPAN lang=EN-US >c.close();</SPAN>
<SPAN lang=EN-US > </SPAN><SPAN lang=EN-US >}</SPAN>
<SPAN lang=EN-US >}</SPAN> |