Boa noite..
Há alguns meses, o blog Mobilidade é Tudo promoveu uma promoção onde foram sorteadas 5 assinaturas digitais da revista Java Magazine. Bem, para participar da promoção os leitores deste blog poderiam enviar sugestões de post, sendo que, uma delas já foi cumprida, veja o post “Um Pouco Sobre Tablets“.
Bem, hoje vou falar sobre um tema que foi idéia do meu amigo Marcel, do blog Mobideia. Transcrevo aqui a dica do Marcel: Gostaria de ver um tutorial aqui de JavaME para acessar serviços REST (um bom exemplo seria acessar o Twitter) com o JavaME. Outro tutorial legal seria uso de JavaFX mobile, para quem está começando! E por fim um tutorial que eu gostaria de ver o uso de JavaME para jogos multiplayer (com mais de 2 de jogadores)!
Vamos por partes :). Sobre o JavaFX, aconselho a leitura do artigo “Conhecendo a Plataforma JavaFX Mobile“, que escrevi para a revista Mundo Java, na edição de Maio de 2009. Mas quem sabe posteriormente vamos colocar uns posts no blog sobre esta linguagem.
Sobre os jogos multiplayer a dica é a mesma. Nas edições 21 e 22 da revista WebMobile, eu e o Robison, ensinamos como criar um jogo Bluetooth entre celular e PC. Mas, também pretendo criar alguns posts sobre este tema daqui um tempo.. :).
Sobrou o assunto dos serviços REST e do twitter. Infelizmente o Java ME não tem um suporte muito legal para serviços REST, isso porque, na grande maioria das implementações do protocolo HTTP na JVM, não existe suporte as quatro operações do protocolo: POST, GET, PUT e DELETE. O REST (Representational State Transfer), que pode ser resumido como um padrão usado em webservices, que fazem uso exclusivo protocolo HTTP para a comunicação. Porém, podemos encontrar algumas implementações de terceiros para uso de serviços REST em Java ME. Dentre os que encontrei, talvez o mais completo seja o descrito no texto “J2ME REST Client“.
Segundo o autor:
Unfortunately J2ME does not provide the best basis for writing a REST Web Service. As I already mentioned in previous posts the J2ME reference implementation does not support all HTTP methods. To overcome this restriction I wrote a J2ME Rest Client that uses HTTP method emulation like Rails does. Even though I heard that some J2ME platforms support PUT and DELETE I decided to use the standard. Method emulation may become a challenge if you’re not talking to your own services since it require a suitable server implementation like I posted for Grails earlier.
————————————————————
Mas, para twiter eu tive mais sorte na minha pesquisa. Encontrei a biblioteca Twitter API ME, criação de Ernandes Mourão Júnior, mantenedor do blog j2megroup. A biblioteca é simplesmente fantástica, você pode baixar uma aplicação de teste aqui. Pra comprovar que funciona coloquei duas capturas de tela.
A primeira, mostra o twitter do Rubinho Barrichello.. capturada as 20:00 do dia 04/12/2009.

A segunda imagem é a tela do emulador executando na IDE NetBeans.

No aplicativo exemplo eu criar um parser para buscar somente os textos com a palavra “amanha” e, do usuário rubarrichello.
Esta aplicação exemplo traz uma aplicação um pouco mais complexa, porém, vejam que barbada que é pra usar a API:
Now let’s show some code. This example demostrates how to search for all the tweets sent by a given user (e.g. me) and that contains the word “F1″ (we will get a lot of results :-)):
…
SearchDevice sd = SearchDevice.getInstance();
Query q1 = QueryComposer.from(”ernandesmjr”);
Query q2 = QueryComposer.contain(”F1″);
Query q3 = QueryComposer.append(q1, q2);
Tweet[] result = sd.searchTweets(q3);
for (int i = 0; i < 0; i++) {
list.append(result[i].getString(MetadataSet.TWEET_CONTENT), null);
}
...
Let’s search for tweets that references or mentions a certain person. In additional, we will request to Twitter Search API to return up to 5 tweets:
…
SearchDevice sd = SearchDevice.getInstance();
Query q1 = QueryComposer.reference(”ernandesmjr”);
Query q2 = QueryComposer.resultCount(5);
Query q3 = QueryComposer.append(q1, q2);
Tweet[] result = sd.searchTweets(q3);
for (int i = 0; i < 0; i++) {
System.out.println(result[i].getString(MetadataSet.TWEET_CONTENT));
System.out.println(result[i].getString(MetadataSet.TWEET_PUBLISH_DATE));
}
...
O único porém é que, nesta versão da API ainda não é possível enviar mensagens pro twitter, mas, na próxima versão essa funcionalidade já estará presente também..
————————————————————
Marcel e todos leitores, espero que tenham gostado.. e parabéns pro Ernandes Mourão Júnior pela sua biblioteca..
Att.
Ping