Ver mensagens sem resposta | Ver tópicos ativos Hoje é 12 Nov 2019, 00:47



Responder Tópico  [ 35 Mensagens ] 
 [TUTORIAL] - ORMLite 
Autor Mensagem
I am API
I am API

Data de registro: 04 Jan 2012, 12:44
Mensagens: 809
Mensagem [TUTORIAL] - ORMLite
Boa Tarde galera!

Bom, Eu comecei a usar um framework para android chamado ORMLite (http://ormlite.com/sqlite_java_android_orm.shtml). É parecido com o Hibernate, e ajuda e ajuda e muito. /uu

Por esse motivo, resolvi fazer um pequeno tutorial, pra ajudar a galera que tiver interessado a conhecer e aprender!

Obs. Esse exemplo está simples, apenas pega os dados da tela, e salva em uma tabela!

Primeiramente vamos baixar os jars necessarios (http://ormlite.com/releases/) e adicionar na pasta libs do seu projeto.
Recomendo baixar os 3 jars, (Android, Core, JDBC).

Vamos criar um model, nesse model vai ser a base da nossa tabela.

@DatabaseTable(tableName = "ce_user")
public class Usuario implements Serializable {

    private static final long serialVersionUID = 1L;

    @DatabaseField(generatedId = true)
    private Long id;

    @DatabaseField
    private String name;

    @DatabaseField
    private Integer idade;
// GET E SET
}
 


Agora vamos criar nossa classe que vai criar o banco de dados e fazer a conexao com ele.

public class DatabaseHelper extends OrmLiteSqliteOpenHelper {

    private final String TAG = DatabaseHelper.class.getSimpleName();

    private static final String DATABASE_NAME = "BASE_NAME.db";
    private static final int DATABASE_VERSION = 1;
    private static DatabaseHelper databaseHelper = null;
    private static final AtomicInteger usageCounter = new AtomicInteger(0);

    private UsuarioDao usuarioDao = null;

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    public static synchronized DatabaseHelper getHelper(Context context) {
        if (databaseHelper == null) {
            databaseHelper = new DatabaseHelper(context);
        }
        usageCounter.incrementAndGet();
        return databaseHelper;
    }

    @Override
    public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) {
        // TODO: Cria as tabelas no Android
        try {
            TableUtils.createTableIfNotExists(connectionSource, Usuario.class);
        } catch (SQLException e) {
            Log.e(TAG, "Can't create database", e);
        }
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int oldVersion, int newVersion) {
        // TODO: Atualiza as tabelas
        try {
            TableUtils.dropTable(connectionSource, Usuario.class, false);

            onCreate(db, connectionSource);
        } catch (Exception e) {
            Log.e(TAG, "Can't update database", e);
        }
    }

    public UsuarioDao getUsuarioDao() {
        try {
            if (usuarioDao == null) {
                usuarioDao = new UsuarioDao(connectionSource, Usuario.class);
            }
        } catch (SQLException ex) {
            Log.w(DatabaseHelper.class.getName(), "Can't create questionDAO", ex);
        }
        return usuarioDao;
    }
}
 


Agora nosso DAO que vai criar a nossa tabela usuário

public class UsuarioDao extends BaseDaoImpl<Usuario, Long> {

    public UsuarioDao(ConnectionSource connectionSource, Class<Usuario> dataClass) throws SQLException {
        super(connectionSource, dataClass);
    }
}
 


Nossa activity:

public class CadastrarActivity extends Activity {

    private final String TAG = CadastrarActivity.class.getSimpleName();

    private Button btnEnviar;
    private EditText edIdade;
    private EditText edNome;

    private DatabaseHelper dataBaseHelper = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cadastrar);

        edIdade = (EditText) findViewById(R.id.edIdade);
        edNome = (EditText) findViewById(R.id.edNome);
        btnEnviar = (Button) findViewById(R.id.bntEnviar);

        dataBaseHelper = DatabaseHelper.getHelper(this);

        btnEnviar.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    save();
                    list();
                } catch (Exception e) {
                    Log.e(TAG, "Erro ao inserir usuario:", e);
                }
            }
        });
    }

    private void save() throws SQLException {
        Usuario user = new Usuario();
        user.setName(edNome.getText().toString());
        user.setIdade(Integer.valueOf(edIdade.getText().toString()));
        dataBaseHelper.getUsuarioDao().createOrUpdate(user);
    }

    private void list() throws SQLException {
        List<Usuario> usuarios = dataBaseHelper.getUsuarioDao().queryForAll(); // Retorna a lista
    }
}
 


Nosso XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >


        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Nome" />


        <EditText
            android:id="@+id/edNome"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ems="10" >

            <requestFocus />
        </EditText>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >


        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Idade" />


        <EditText
            android:id="@+id/edIdade"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ems="10"
            android:numeric="integer" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >


        <Button
            android:id="@+id/bntEnviar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Enviar" />

    </LinearLayout>
</LinearLayout>
 


Bom galera, é isso ai!

É mais um exemplo que um tutorial, mas é muito simples de utilizar, quem já tem conhecimento em Hibernate fica muito facil!

Qualquer duvida, sugestão, critica é só comentar!

Abraços!

_________________

E-Mail: thales.bm@hotmail.com
LinkedIn: LinkedIn
Aplicativos no Google Play: Biblioteca de Aplicativos
Livro de Estudos: Google Android - 3ª Edição


30 Set 2013, 16:28
Perfil
Google employee
Google employee

Data de registro: 28 Jun 2012, 19:13
Mensagens: 1308
Localização: Itaperuna-RJ
Mensagem Re: [TUTORIAL] - ORMLite
Boa Shenn, gosto tanto do hibernate... mas para android ainda não encontrei minha cara metade :D Mas isso ajuda um mocado! Abraços!

_________________
Powell


30 Set 2013, 22:50
Perfil
I am API
I am API

Data de registro: 04 Jan 2012, 12:44
Mensagens: 809
Mensagem Re: [TUTORIAL] - ORMLite
raphaelframos isso foi a melhor coisa que achei para android, não gostei de fazer do jeito nativo do android..

_________________

E-Mail: thales.bm@hotmail.com
LinkedIn: LinkedIn
Aplicativos no Google Play: Biblioteca de Aplicativos
Livro de Estudos: Google Android - 3ª Edição


30 Set 2013, 23:09
Perfil
Google employee
Google employee

Data de registro: 28 Jan 2011, 11:42
Mensagens: 1037
Localização: Rio Grande do Sul
Mensagem Re: [TUTORIAL] - ORMLite
Nunca tivesse experiência com o GreenDao?

Abraço


08 Nov 2013, 14:35
Perfil
I am API
I am API

Data de registro: 04 Jan 2012, 12:44
Mensagens: 809
Mensagem Re: [TUTORIAL] - ORMLite
rafaeldecker, vou dar uma pesquisada porque desconheço! Depois comento sobre o que achei!

_________________

E-Mail: thales.bm@hotmail.com
LinkedIn: LinkedIn
Aplicativos no Google Play: Biblioteca de Aplicativos
Livro de Estudos: Google Android - 3ª Edição


08 Nov 2013, 14:38
Perfil
Android Man
Android Man

Data de registro: 23 Abr 2012, 17:32
Mensagens: 917
Localização: Joinville - SC
Mensagem Re: [TUTORIAL] - ORMLite
Grande tutorial SHENN.
Tirou muitas dúvidas minha.
Parabéns e grande abraço.

_________________
RaFael
Formação : Bacharel em ciência da computação - UNISUL
rafaelreinaldoduarte@gmail.com - Gtalk
Celular : NEXUS 5
Programador Android, JavaSE, Arduino.


08 Nov 2013, 14:48
Perfil
I am API
I am API

Data de registro: 04 Jan 2012, 12:44
Mensagens: 809
Mensagem Re: [TUTORIAL] - ORMLite
RaF, fico feliz que você gostou!

Qualquer duvida é só postar!! =D

_________________

E-Mail: thales.bm@hotmail.com
LinkedIn: LinkedIn
Aplicativos no Google Play: Biblioteca de Aplicativos
Livro de Estudos: Google Android - 3ª Edição


08 Nov 2013, 15:51
Perfil
Google employee
Google employee

Data de registro: 01 Jul 2013, 13:45
Mensagens: 2735
Localização: Rio de Janeiro
Mensagem Re: [TUTORIAL] - ORMLite
Shenn, gostei muito desse tutorial, foi bem mais fácil do que usar SQLite.
Pra ter certeza se eu conseguir entender, fiz uma lista de conclusões e algumas dúvidas, e quero te perguntar quais estão certas:


@DatabaseTable(tableName = "ce_user")
public class Usuario implements Serializable {
    private static final long serialVersionUID = 1L;
   
    @DatabaseField(generatedId = true)
    private Long id;

    @DatabaseField
    private String nome;

    @DatabaseField
    private Integer idade;
 


@DatabaseTable indica uma tabela no banco de dados, com nome ce_user.
@DatabaseField indica uma coluna na tabela.
O Long anotado com @DatabaseField(generatedId = true) serve pra quando eu precisar fazer uma busca no bd, eu posso fazer apenas com um long (mas pode ser qualquer outro tipo) e todas as informações do usuário pesquisado serão retornadas. Nessa parte eu ainda tô na dúvida.
E qual foi o motivo de implementar Serializable? É obrigatório?



public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
    //...
}
 


Nessa classe, eu não entendi duas coisas:
A primeira foi o uso do método incrementAndGet();
E esse eu ainda não entendo nem com SQLite:


    public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int oldVersion, int newVersion) {
        /...
    }
 


Esse método é chamado toda vez que o bd é atualizado. O inteiro oldVersion é a versão atual do bd e o newVersion é versão pra qual o banco vai atualizar. Mas quando essa atualização no newVersion acontece? O próprio android incrementa a variável DATABASE_VERSION?



public class UsuarioDao extends BaseDaoImpl<Usuario, Long> {
    public UsuarioDao(ConnectionSource connectionSource, Class<Usuario> dataClass) throws SQLException {
        super(connectionSource, dataClass);
    }
}
 


É necessário que cada classe que controle uma tabela específica extenda a classe BaseDaoImpl<Usuario, Long>, onde o primeiro parâmetro é a classe que representa a tabela e o segundo parâmetro é o tipo do Id da classe.

Então, alguma dessas estão certas?

_________________
Quando seu problema for resolvido, clique na opção Editar no lado superior direito da sua primeira mensagem e coloque [Resolvido] no título.
Se resolveu o problema sozinh@, não esqueça de postar a solução, ela ajuda usuários em buscas no fórum.
Use os marcadores java e xml quando for postar.

Aprenda Java com esta apostila.


23 Dez 2013, 12:29
Perfil WWW
I am API
I am API

Data de registro: 04 Jan 2012, 12:44
Mensagens: 809
Mensagem Re: [TUTORIAL] - ORMLite
kaito, fico feliz que você conseguiu aprender essa tecnologia, que na minha opinião é muito boa e facilita muito!

Agora vamos lá responder suas duvidas /uu

Pergunta:O Long anotado com @DatabaseField(generatedId = true) serve pra quando eu precisar fazer uma busca no bd, eu posso fazer apenas com um long (mas pode ser qualquer outro tipo) e todas as informações do usuário pesquisado serão retornadas. Nessa parte eu ainda tô na dúvida.

Resposta: Quando eu coloco essa anotação, estou falando que o meu campo id vai ser do tipo Long. Pode ser int também, e quando eu vou pesquisar pelo metodo queryForId(long), ele recebe o id por parametro, e vai retornar o objeto inteiro.

Pergunta: E qual foi o motivo de implementar Serializable? É obrigatório?

Resposta: Eu implemento o Serializable porque eu tranfiro o objeto entra activitys, pelo intent.

Pergunta: Esse método é chamado toda vez que o bd é atualizado. O inteiro oldVersion é a versão atual do bd e o newVersion é versão pra qual o banco vai atualizar. Mas quando essa atualização no newVersion acontece? O próprio android incrementa a variável DATABASE_VERSION?

Resposta: Essa atualização acontece quando você altera o seu DATABASE_VERSION, vamos supor que você criou uma nova tabela no seu banco, e vai subir para o google play, quando o usuario fazer o download vai cair nesse metodo.

Cara, acho que respondi todas as duvidas, qq coisa estou a disposição para ajudar novamente =D

Abraços e bons estudos!!

_________________

E-Mail: thales.bm@hotmail.com
LinkedIn: LinkedIn
Aplicativos no Google Play: Biblioteca de Aplicativos
Livro de Estudos: Google Android - 3ª Edição


26 Dez 2013, 10:22
Perfil
Google employee
Google employee

Data de registro: 01 Jul 2013, 13:45
Mensagens: 2735
Localização: Rio de Janeiro
Mensagem Re: [TUTORIAL] - ORMLite
Valeu, Shenn! Agora eu entendi o onUpgrade()! \nn

_________________
Quando seu problema for resolvido, clique na opção Editar no lado superior direito da sua primeira mensagem e coloque [Resolvido] no título.
Se resolveu o problema sozinh@, não esqueça de postar a solução, ela ajuda usuários em buscas no fórum.
Use os marcadores java e xml quando for postar.

Aprenda Java com esta apostila.


26 Dez 2013, 23:16
Perfil WWW
Android Man
Android Man

Data de registro: 23 Abr 2012, 17:32
Mensagens: 917
Localização: Joinville - SC
Mensagem Re: [TUTORIAL] - ORMLite
Bom dia Shenn
tem um exemplo ai de hql desse tipo sem ser o queryall?

criando o select certinho?

ex: criar um select do tipo... select sum(idade) as idade from ce_user

como eu poderia fazer isso?
valeu

_________________
RaFael
Formação : Bacharel em ciência da computação - UNISUL
rafaelreinaldoduarte@gmail.com - Gtalk
Celular : NEXUS 5
Programador Android, JavaSE, Arduino.


09 Jan 2014, 08:57
Perfil
I am API
I am API

Data de registro: 04 Jan 2012, 12:44
Mensagens: 809
Mensagem Re: [TUTORIAL] - ORMLite
Cara, o ORMLite é bem simples, sempre que preciso fazer uma query um pouco diferente eu uso assim:

Dentro do metodo da minha classe DAO eu faço isso


String sql = "sua query"
       
String[] results = queryRaw(sql).getFirstResult();
 


Eu utilizo desse jeito!

Olha a documentação:

http://ormlite.com/javadoc/ormlite-core ... o/Dao.html

_________________

E-Mail: thales.bm@hotmail.com
LinkedIn: LinkedIn
Aplicativos no Google Play: Biblioteca de Aplicativos
Livro de Estudos: Google Android - 3ª Edição


10 Jan 2014, 09:11
Perfil
Hello World!
Hello World!

Data de registro: 13 Fev 2012, 21:30
Mensagens: 28
Mensagem Re: [TUTORIAL] - ORMLite
Teria algum exemplo que use duas tabelas? Tipo Cliente e Telefones? Estou com essa dúvida.


28 Jan 2014, 16:12
Perfil
I am API
I am API

Data de registro: 04 Jan 2012, 12:44
Mensagens: 809
Mensagem Re: [TUTORIAL] - ORMLite
Na classe cliente:


// .. nome da classe
@ForeignCollectionField(eager = true)
private ForeignCollection<Telefone> telefones;
// .. outros campos
// .. get/set
 


na classe Telefone

// .. nome da classe
@@DatabaseField(foreign = true, foreignAutoRefresh = true)
private Cliente cliente;
// .. outros campos
// .. get/set
 

_________________

E-Mail: thales.bm@hotmail.com
LinkedIn: LinkedIn
Aplicativos no Google Play: Biblioteca de Aplicativos
Livro de Estudos: Google Android - 3ª Edição


28 Jan 2014, 18:00
Perfil
What is a Activity?
What is a Activity?

Data de registro: 11 Fev 2014, 10:38
Mensagens: 12
Mensagem Re: [TUTORIAL] - ORMLite
Olá, SHENN.

Primeiramente, ótimo tutorial. Implementei e deu tudo certo.
Só que me surgiu uma situação e estou com problemas de resolve-la.
Você utilizou a anotação @DatabaseField(generatedId = true). Até aí, tudo bem.
O problema é que com dois modelos utilizando essa anotação, somente uma funcionará.
No documentação da ORMLite de fato está descrito esta situação, mas então só funciona para uma tabela?
Logo, terei que atribuir a anotação @DatabaseField(id = true) e implementar um increment..

Abraços

_________________
Vida longa e Próspera!


20 Mar 2014, 16:58
Perfil
I am API
I am API

Data de registro: 04 Jan 2012, 12:44
Mensagens: 809
Mensagem Re: [TUTORIAL] - ORMLite
Sempre que eu utilizo o generatedId coloco essa outra propriedade também allowGeneratedIdInsert:

http://ormlite.com/javadoc/ormlite-core ... dIdInsert()

@DatabaseField(generatedId = true, allowGeneratedIdInsert = true)
private Long id;


Não sei se tem alguma coisa com relação ao seu problema, mas eu uso varios generatedId.

Boa Sorte e qualquer coisa posta ae!

_________________

E-Mail: thales.bm@hotmail.com
LinkedIn: LinkedIn
Aplicativos no Google Play: Biblioteca de Aplicativos
Livro de Estudos: Google Android - 3ª Edição


25 Mar 2014, 16:13
Perfil
What is a Activity?
What is a Activity?

Data de registro: 11 Fev 2014, 10:38
Mensagens: 12
Mensagem Re: [TUTORIAL] - ORMLite
Tranquilo SHENN.

Pois é... era falta de conhecimento mesmo.
Eu estava implementando a classe que herda de OrmLiteSqliteOpenHelper, imaginando que o onCreate era chamado em toda instancialização.
No caso eu coloquei todas as classes que tem persistência.


@Override
    public void onCreate(SQLiteDatabase sqlDb, ConnectionSource conn) {
        try {
            TableUtils.createTableIfNotExists(conn, Profissional.class);
            TableUtils.createTableIfNotExists(conn, Usuario.class);
        } catch (SQLException e) {
            Log.e("logs: ", e.getMessage());
        }
    }
 


Desta forma funcionou tudo certo.
Claro que, não sei se é a forma correta de implementar, mas por enquanto vai indo assim. rss

Obrigado

o/

_________________
Vida longa e Próspera!


27 Mar 2014, 11:03
Perfil
I am API
I am API

Data de registro: 04 Jan 2012, 12:44
Mensagens: 809
Mensagem Re: [TUTORIAL] - ORMLite
O método onCreate só é chamado quando o app está sendo instalado!

(http://ormlite.com/javadoc/ormlite-andr ... elper.html)

Depois que o app é instalado e você alterou o DATABASE_VERSION ao invés de cair no onCreate, vai passar pelo onUpdate.

_________________

E-Mail: thales.bm@hotmail.com
LinkedIn: LinkedIn
Aplicativos no Google Play: Biblioteca de Aplicativos
Livro de Estudos: Google Android - 3ª Edição


01 Abr 2014, 13:28
Perfil
Hello World!
Hello World!

Data de registro: 12 Mar 2014, 00:03
Mensagens: 25
Mensagem Re: [TUTORIAL] - ORMLite
Fiquei interressado nesse ORMLite, porém tenho uma dúvida.

Eu vou utilizar ele com webservice, então como seria para que na hora da sincronização o ORMLite verificar se o cadastro já existe no banco ele atualiza, senão ele insere?
Por exemplo, vamos supor que no aplicativo tem vários clientes cadastrados, toda vez que faço a sincronização com o webservice eu pego todos os clientes do webservice e vou inserindo no banco do aplicativo. Mas se um cliente mudou só o endereço, como faço para ele não inserir esse cliente novamente e somente modificar os dados que foram alterados?


05 Mai 2014, 23:56
Perfil
I am API
I am API

Data de registro: 04 Jan 2012, 12:44
Mensagens: 809
Mensagem Re: [TUTORIAL] - ORMLite
Boa pergunta!

Então, ele tem varios metodos que ajudam nessa parte.

Segue a documentação que fala sobre isso: (http://ormlite.com/javadoc/ormlite-core ... o/Dao.html)

Mas partindo do principio que os clientes sempre vão ter o mesmo id, é só você dar um createOrUpdate()

_________________

E-Mail: thales.bm@hotmail.com
LinkedIn: LinkedIn
Aplicativos no Google Play: Biblioteca de Aplicativos
Livro de Estudos: Google Android - 3ª Edição


06 Mai 2014, 10:35
Perfil
Hello World!
Hello World!

Data de registro: 12 Mar 2014, 00:03
Mensagens: 25
Mensagem Re: [TUTORIAL] - ORMLite
SHENN escreveu:
Boa pergunta!

Então, ele tem varios metodos que ajudam nessa parte.

Segue a documentação que fala sobre isso: (http://ormlite.com/javadoc/ormlite-core ... o/Dao.html)

Mas partindo do principio que os clientes sempre vão ter o mesmo id, é só você dar um createOrUpdate()


Show de bola, vou implementar aqui no meu aplicativo e vamos ver no que vai dar.

O FODA É QUE JÁ FIZ UMAS MIL LINHAS DE CÓDIGO E VOU TER QUE COMEÇAR DO ZERO /tt


07 Mai 2014, 22:17
Perfil
I am API
I am API

Data de registro: 04 Jan 2012, 12:44
Mensagens: 809
Mensagem Re: [TUTORIAL] - ORMLite
hahahaha

qualquer coisa é só postar ai! =D

_________________

E-Mail: thales.bm@hotmail.com
LinkedIn: LinkedIn
Aplicativos no Google Play: Biblioteca de Aplicativos
Livro de Estudos: Google Android - 3ª Edição


09 Mai 2014, 11:14
Perfil
Hello World!
Hello World!

Data de registro: 12 Mar 2014, 00:03
Mensagens: 25
Mensagem Re: [TUTORIAL] - ORMLite
Meu amigo, olha eu penando aqui.

Botei a mão na obra e estou começando pelos cadastros de Cidade / Estado.

Estou pegando esses dados de um WebService php através de um Array Json com a biblioteca GSON(Não sei se é a melhor integração.. tem alguma dica?)


Para criar o Estado funcionou de boa.
@DatabaseTable(tableName = "estado")
public class EstadoModel {
   
    @DatabaseField(columnName = "_id", id = true)
    private int id;
   
    @DatabaseField(columnName = "nome_estado", canBeNull = false)
    private String NomeEstado;
   
    @DatabaseField(columnName = "uf_estado", canBeNull = false)
    private String UfEstado;
   
  public EstadoModel(){

  }

//getters e setters  


}



Mas para criar as Cidades estou com um probleminha com as chaves estrangeiras.
Cada cidade tem um estado, certo?

Então pelo seu exemplo minha chave estrangeira de Estado na classe Cidade deve ser assim:

@DatabaseTable(tableName = "cidade")
public class CidadeModel {
   
    @DatabaseField(columnName = "_id", id = true)
    private int id;

@DatabaseField(foreign = true, foreignAutoRefresh = true)
    private EstadoModel estado;
   
@DatabaseField(columnName = "nome_cidade", canBeNull = false)
    private String NomeCidade;
   
   
    public CidadeModel(){

    }

//getters e setters


Meu problema é que a Biblioteca GSON não consegue entender isso quando eu faço a conexão com o webservice
private EstadoModel estado;


Se eu fizer isso aqui abaixo, funciona, porém, é óbvio que não estou dizendo para o ORM que esse campo é uma chave estrangeira
@DatabaseField(columnName = "D_ESTADOS_id", canBeNull = false)
    private int estado;


Não sei se estou fazendo certo, mas peguei outro tutorial de como utilizar o WebService com GSON e ele necessita que os nomes dos campos que vem do Webservice sejam iguais aos nomes dos campos das Classes.
Portanto isso essa parte
private EstadoModel estado;
ele não entende e não consegue buscar o campo que vem do Array, o GSON espera que venha um campo chamado estado e não private EstadoModel estado,

Então para funcionar perfeitamente, meu nome do campo tem que ser private int qualquernome.
Ai eu vi que existe a denotação foreignColumnName. Essa opção para dizer que o campo é uma chave estrangeira é valida?
Por exemplo:
@DatabaseField(foreignColumnName= "D_ESTADOS_id")
    private int estado;


taa bem confuso isso, espero que vc entenda IUHEAIUEAHUI.

Outra coisa, tenho o nome de uma cidade como São Lourenço Do Oeste e quando grava no Banco a informação fica assim:
S&atilde;o Louren&ccedil;o do Oeste, o que preciso fazer para gravar no banco com os acentos?


14 Mai 2014, 00:32
Perfil
I am API
I am API

Data de registro: 04 Jan 2012, 12:44
Mensagens: 809
Mensagem Re: [TUTORIAL] - ORMLite
Estou pegando esses dados de um WebService php através de um Array Json com a biblioteca GSON(Não sei se é a melhor integração.. tem alguma dica?)

Esse é o jeito que eu faço também, se tem algum jeito melhor eu desconheço.

Sim cara, está muito confuso UHASUHASUHASUHAS

Olha um jeito de fazer esse relacionamento:

Aqui estou falando que uma cidade tem um estado. E um estado tem uma lista de cidades.

Ou seja, quando eu mandar o json, vou ter que mandar o objeto cidade, e dentro dele um objeto estado.
Quando eu mandar o objeto estado, não preciso falar que o estado São Paulo tem uma lista de cidades, pq ele não vai salvar no banco isso.

Ele so vai fazer a associação de cidade para estado


@DatabaseTable(tableName = "city")
public class City {
    @DatabaseField(canBeNull = false, foreign = true, foreignAutoRefresh = true)
    private State state;
// get e set
}

@DatabaseTable(tableName = "state")
public class State{
    @ForeignCollectionField
    private ForeignCollection<City> citys;
// get e set
}
 


Deu pra entender ?

_________________

E-Mail: thales.bm@hotmail.com
LinkedIn: LinkedIn
Aplicativos no Google Play: Biblioteca de Aplicativos
Livro de Estudos: Google Android - 3ª Edição


19 Mai 2014, 17:11
Perfil
Hello World!
Hello World!

Data de registro: 12 Mar 2014, 00:03
Mensagens: 25
Mensagem Re: [TUTORIAL] - ORMLite
@Shenn, eu até te entendi.

Mas o meu problema é que meu Json de Cidades vem assim:

{"Cidade":
[
{"id":"1","estado":"1","NomeCidade":"São Lourenço do Oeste"},
{"id":"2","estado":"2","NomeCidade":"Porto Alegre"}
]
}

a parte em negrito ali em cima é referente ao campo estado_id da tabela cidade. ou seja, é o ID do estado que a cidade pertence, certo?

Então quando eu mando conectar com meu webservice ele da o seguinte erro:

expected begin_object but was string, pelo que eu entendi ele espera um Objeto, mas ta vindo uma String.
Por causa desse código na classe cidade:
@DatabaseField(canBeNull = false, foreign = true, foreignAutoRefresh = true)
    private EstadoModel estado;


Está dando erro nessa parte:

                                      Gson gson = new Gson();
                    this.resposta = gson.fromJson(inputStreamReader, Resposta.class);


Na minha classe Resposta eu tenho:
public class Resposta {

        public ArrayList<EstadoModel> Estado;
        public ArrayList<CidadeModel> Cidade;
                public Resposta(){

            Estado = new ArrayList<EstadoModel>();
            Cidade = new ArrayList<CidadeModel>();
              }
}


20 Mai 2014, 23:35
Perfil
I am API
I am API

Data de registro: 04 Jan 2012, 12:44
Mensagens: 809
Mensagem Re: [TUTORIAL] - ORMLite
No seu caso você teria que fazer o parse na mão mesmo! Ja que um objeto não está igual ao outro!

_________________

E-Mail: thales.bm@hotmail.com
LinkedIn: LinkedIn
Aplicativos no Google Play: Biblioteca de Aplicativos
Livro de Estudos: Google Android - 3ª Edição


26 Mai 2014, 10:47
Perfil
Hello World!
Hello World!

Data de registro: 12 Mar 2014, 00:03
Mensagens: 25
Mensagem Re: [TUTORIAL] - ORMLite
SHENN escreveu:
No seu caso você teria que fazer o parse na mão mesmo! Ja que um objeto não está igual ao outro!


Cara, tranquilo.
Vou ver o que faço aqui.

Só mais uma dúvida hehe :oops:

Qual a melhor forma de deletar o banco de dados?
Eu tenho uma tabela onde armazeno o código do usuário que está utilizando o sistema.
Se esse código mudar eu preciso zerar o banco ou fazer um drop database e recriar ele novamente zerado.
Mas eu estava olhando a documentação do OrmLite e ele não tem um deletedatabase()..


29 Mai 2014, 01:08
Perfil
I am API
I am API

Data de registro: 04 Jan 2012, 12:44
Mensagens: 809
Mensagem Re: [TUTORIAL] - ORMLite
Tem varios jeitos.

Você pode dar um drop em todas as tabelas e depois chamar o onCreate.

Não estou lembrado se o orm tem um drop table, se tiver voce pode usar ele tambem!

_________________

E-Mail: thales.bm@hotmail.com
LinkedIn: LinkedIn
Aplicativos no Google Play: Biblioteca de Aplicativos
Livro de Estudos: Google Android - 3ª Edição


29 Mai 2014, 15:10
Perfil
Android Man
Android Man

Data de registro: 23 Abr 2012, 17:32
Mensagens: 917
Localização: Joinville - SC
Mensagem Re: [TUTORIAL] - ORMLite
E ai Thales, vc que utiliza isso a mais tempo, sabe me informar SE quando eu altero a versao do banco de dados, ele nao faça o drop database?

eu queria fazer apenas o update nas tabelas e nos campos que coloquei como novo

é apenas para questao de didática, hoje em dia eu não necessito isso, mas é curiosidade
euhaueh

valeu

_________________
RaFael
Formação : Bacharel em ciência da computação - UNISUL
rafaelreinaldoduarte@gmail.com - Gtalk
Celular : NEXUS 5
Programador Android, JavaSE, Arduino.


03 Jun 2014, 10:00
Perfil
I am API
I am API

Data de registro: 04 Jan 2012, 12:44
Mensagens: 809
Mensagem Re: [TUTORIAL] - ORMLite
Quando você altera a versão do banco de dados ele não faz drop nas tabelas!

Quando alterado ele cai no metodo onUpdate(), esse onUpdate recebe alguns parametros, entre eles o oldVersion e o newVersion. Com isso você consegue saber quais tabelas precisa atualizar..

Ai vem duas situações:

1º Se você não precisa salvar os dados das tabelas, pode dar um drop e depois um new. Para ele criar a nova tabela atualizada.

2º Se você precisa copiar os dados da tabela e armazenar na nova eu faço o seguinte:

- Renomeio a atual para algo assim "tb_user_old"
- crio a nova
- faço um select na antiga
- e vou inserindo na nova
- depois drop a antiga..

Um processo meio chato, mas não conheço nada melhor =/

_________________

E-Mail: thales.bm@hotmail.com
LinkedIn: LinkedIn
Aplicativos no Google Play: Biblioteca de Aplicativos
Livro de Estudos: Google Android - 3ª Edição


04 Jun 2014, 14:39
Perfil
Android Man
Android Man

Data de registro: 23 Abr 2012, 17:32
Mensagens: 917
Localização: Joinville - SC
Mensagem Re: [TUTORIAL] - ORMLite
Entendi,
acho que a parte de one to one
one to many
many to one

e chave primaria composta
nao estão bem explicado

tens algum exemplo ai que se encaixa nessas situacoes?
Valeu

_________________
RaFael
Formação : Bacharel em ciência da computação - UNISUL
rafaelreinaldoduarte@gmail.com - Gtalk
Celular : NEXUS 5
Programador Android, JavaSE, Arduino.


05 Jun 2014, 13:16
Perfil
Hello World!
Hello World!

Data de registro: 12 Mar 2014, 00:03
Mensagens: 25
Mensagem Re: [TUTORIAL] - ORMLite
Consegui limpar a base de Dados fazendo assim:

DbHelper db = new DbHelper(getApplicationContext());
ConnectionSource con = db.getConnectionSource();
TableUtils.clearTable(con, Tabela1.class);
TableUtils.clearTable(con, Tabela2.class);
TableUtils.clearTable(con, Tabela3.class);


06 Jun 2014, 22:49
Perfil
I am API
I am API

Data de registro: 04 Jan 2012, 12:44
Mensagens: 809
Mensagem Re: [TUTORIAL] - ORMLite
marciofornari

Uma solução melhor que a minha! Vou implementar isso aqui depois!

Valeu

_________________

E-Mail: thales.bm@hotmail.com
LinkedIn: LinkedIn
Aplicativos no Google Play: Biblioteca de Aplicativos
Livro de Estudos: Google Android - 3ª Edição


11 Jun 2014, 13:26
Perfil
I am API
I am API

Data de registro: 04 Jan 2012, 12:44
Mensagens: 809
Mensagem Re: [TUTORIAL] - ORMLite
RaF

Vê se esses dois links ajudam:

http://ormlite.com/javadoc/ormlite-core ... iqueCombo()

http://ormlite.com/javadoc/ormlite-core ... sted-Types

_________________

E-Mail: thales.bm@hotmail.com
LinkedIn: LinkedIn
Aplicativos no Google Play: Biblioteca de Aplicativos
Livro de Estudos: Google Android - 3ª Edição


11 Jun 2014, 13:32
Perfil
Android application
Android application

Data de registro: 27 Abr 2013, 10:31
Mensagens: 98
Localização: Ubá - MG
Mensagem Re: [TUTORIAL] - ORMLite
Tem algum exemplo de chave composta com foreign key?

_________________
Paulo Ricardo Noé

Email: pauloricardonoe@gmail.com


10 Mar 2015, 16:53
Perfil
Mostrar mensagens anteriores:  Organizar por  
Responder Tópico   [ 35 Mensagens ] 

Quem está online

Usuários vendo este fórum: agtavares, Alexandre Castro, Alexandrercarvalho, alfredo_ej, b7web, beeshop, betofigu, BiG_SerGiO, bomcabelo, Bravox, bravus, Bruno, brunogh, BrunoO, BTalhadas, btleandro, camilodev, Carla Luz, Carlos Alexandre, carlos rodrigues, Carmizini, chunga, cleberkct, cleiton_maciel, comolatti, Damiani Oliveira, dariosena, David, diogeneskelsen, Dookan, Eduardo - Brasil, eferrari, erosvaldo, felipedsilva, fernandofsf, Gabriel Teófilo, gamito, Geovanne Duarte, Gomes, GuilhermeZampieri, hopper.frf, HyagoRules, ICCrawler - ICjobs, Ielo8, j-menezes, jacksonst, jackstuard, jairo, José Guilherme, juliancesar, juniorfranca, kecyobarros, lafamac, Leonardo333, Lincoln, Lindberg, luciocamilo, luizneto79, Lúcio Zanette, marcelocastellani, Marlosm, Moisés Souto, neviim, nfaria, nilsgome, nsansilva, obitow, oliveiramc, oliverlessa, onaiggac, Patricia, phobos, Rafael, Rafael Alencar, rafaelmonoh, raulcca, regisjj, renatodondoni, renegheller, ricardo, ricardzanella, rogerio, Romulo, ronamore, rtodao, samuel.cavanieri, sasuke_sarutobi, ScoobyGB, shazaum, sobrinho, suissa, talves, tavares767, tChAnDy, Thiago, thiago20, thosjanas, Topeca, vieira, Wookiees e 1 visitante


Você não pode criar novos tópicos neste fórum
Você não pode responder tópicos neste fórum
Você não pode editar suas mensagens neste fórum
Você não pode excluir suas mensagens neste fórum
Você não pode enviar anexos neste fórum

Procurar por:

© 2007 - 2016 Portal Android - Comunidade de Desenvolvedores Android

Estamos no Linkedin    Siga-nos no twitter


Powered by phpBB - Hospedado por Bemobi