Desenvolvimento

Criando sua aplicação Rails + Android

Olá a todos. Que android é o que há no momento todo mundo já sabe. Mas para alguns desenvolvedores que vem de outra linguagem como Ruby pode parecer uma coisa de outro mundo desenvolver em Java. Na verdade isto pra mim ainda é um terreno desconhecido mas vamos lidando.
Meu intuito com este post é mostrar uma aplicação simples, bem simples mesmo, onde um formulário de uma aplicação em android envia informações via Post para uma aplicação rails. Vou tentar ser direto ao ponto e me desculpem pelas asneiras em java, como já escrito acima, não sou o melhor exemplo nesta área. Prontos ou não… da hadouken Ryu…
Vamos fazer a parte simples: a aplicação em Rails 3 que cadastrará as fofocas que pessoas contaram uma das outras

rails new fofoca
cd fofoca
bundle install
rails g scaffold Segredo de:string para:string ex_segredo:text
rake db:migrate
rails s

Acessando localhost:3000/segredos é possível verificar o que as maracutais que serão enviadas como segredos =)
Agora vem a parte do android que por sinal é simples. Estou partindo do princípio que quem está lendo possui Eclipse com Android instalado e configurado. Caso não tenha veja esses links, é rápido e simples.

how to http://developer.android.com/sdk/installing.html

downloads necessários http://developer.android.com/sdk/index.html

Ok então… lá vão os códigos:
Arquivo de layout main.xml (tela inicial da aplicação)








E o arquivo Main.java

package com.toledo;

import java.util.ArrayList;

import java.util.List;

import org.apache.http.HttpResponse;

import org.apache.http.NameValuePair;

import org.apache.http.client.HttpClient;

import org.apache.http.client.entity.UrlEncodedFormEntity;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.impl.client.DefaultHttpClient;

import org.apache.http.message.BasicNameValuePair;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;

public class Main extends Activity {
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Button btnEnviar = (Button) findViewById(R.id.btnEnviar);
    btnEnviar.setOnClickListener(new View.OnClickListener() {
      public void onClick(View view) {
        enviarParaCadastro();
        Intent myIntent = new Intent(view.getContext(), TrackMeet.class);
        startActivityForResult(myIntent, 0);
      }
    });
  }
  public void enviarParaCadastro() {
    final EditText editDe = (EditText) findViewById(R.id.editDe);
    String de = editDe.getText().toString();
    final EditText editPara = (EditText) findViewById(R.id.editPara);
    String para = editPara.getText().toString();
    final EditText editExSegredo = (EditText) findViewById(R.id.editExSegredo);
    String ex_segredo = editExSegredo.getText().toString();
    HttpClient client = new DefaultHttpClient();
    HttpPost post = new HttpPost("http://10.0.2.2:3000/segredos");
    List pairs = new ArrayList();
    pairs.add(new BasicNameValuePair("segredo[de]",         de));
    pairs.add(new BasicNameValuePair("segredo[para]",       para));
    pairs.add(new BasicNameValuePair("segredo[ex_segredo]",     ex_segredo));
    try {
      post.setEntity(new UrlEncodedFormEntity(pairs));
      HttpResponse response = client.execute(post);
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
}

Bate-bola sobre os arquivos:
main.xml contém é a tela inicial do projeto com o formulário
Main.java Classe que faz todo o trabalho de criar o evento de clicar no botão Enviar e os dados serem enviados ao servidor. Uma dica importante é que o servidor no caso responde por 10.0.2.2 mas quando for publicar online troquem o endereço certo?!

Pronto… é só fazer o build da aplicação no emulador do android e testar.