Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Ajuda na criação do banco de dados

Olá, preciso que ajuda na criação do banco de dados da minha aplicação, fiz tudo de acordo com video da aula 18 mas por algum motivo que não consigo resolver ele não esta criando a banco, a aplicação roda normalmente mas não registra nem exibe nenhum aluno que eu cadastro. Segue códigos da aplicação.

ps.: alguns códigos podem estar diferentes dos da aula pois tentei muitas coisas pra resolver o problema e não consegui.

Código java e xml do formulário:

 package br.com.caelum.cadastro;

import ...

public class Formularioactivity extends Activity {

    private  FormularioHelper helper;    

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.formulario);

        helper = new FormularioHelper(this);

        Button botao = (Button) findViewById(R.id.Gravar);

        botao.setOnClickListener( new OnClickListener() {

            public void onClick(View v) {

                Aluno aluno = helper.pegaAlunoDoFormulario();
                AlunoDAO dao = new AlunoDAO(Formularioactivity.this);

                dao.insere(aluno);
                dao.close();

                finish();

            }
        });    
    }
}
<ScrollView 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:measureAllChildren="false" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:ignore="ScrollViewSize" >

        <ImageButton
            android:id="@+id/Foto"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_gravity="center"
            android:src="@drawable/ic_enviar" />

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/Foto"
            android:text="Nome: " />

        <EditText
            android:id="@+id/Nome"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="Digite seu nome aqui ..." />

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Site: " />

        <EditText
            android:id="@+id/Site"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="Digite seu site aqui ..." />

        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Endereço: " />

        <EditText
            android:id="@+id/Endereco"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="Digite seu Endereço aqui ..." >

            <requestFocus />
        </EditText>

        <TextView
            android:id="@+id/textView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Telefone: " />

        <EditText
            android:id="@+id/Telefone"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="Digite seu Telefone aqui ..." />

        <TextView
            android:id="@+id/textView5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Nota: " />

        <SeekBar
            android:id="@+id/Nota"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:max="10" />

        <Button
            android:id="@+id/Gravar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Gravar" />
    </LinearLayout>

</ScrollView>

Código java e xml da lista de alunos:

package br.com.caelum.cadastro;

import ...

public class ListaAlunosActivity extends Activity{

    private ListView listaAlunos;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listagem_alunos);

}

    public boolean onCreateOptionsMenu(Menu menu) {

        MenuInflater infrater = getMenuInflater();
        infrater.inflate(R.menu.menu_principal, menu);
        return true;
    }

    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.novo:
            Intent intent = new Intent(ListaAlunosActivity.this,Formularioactivity.class);
            startActivity(intent);
            break;

        default:
            return super.onOptionsItemSelected(item);
        }
        return true;
    }

    protected void onResume() {
        super.onResume();

        AlunoDAO dao = new AlunoDAO(this); 
        List<Aluno> alunos = dao.getLista();    
        listaAlunos = (ListView) findViewById(R.id.lista);

        ArrayAdapter<Aluno> adapter = new ArrayAdapter<Aluno>(this, android.R.layout.simple_list_item_1,alunos);
        listaAlunos.setAdapter(adapter);

    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/lista"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

    </ListView>  

</LinearLayout>

Códigos java das classes Aluno,FormularioHelper:

package br.com.caelum.cadastro.modelo;

public class Aluno {
    private String nome;
    private String endereco;
    private String telefone;
    private String site;
    private Double nota;
    private Long id;

    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public String getEndereco() {
        return endereco;
    }
    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }
    public String getTelefone() {
        return telefone;
    }
    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }
    public String getSite() {
        return site;
    }
    public void setSite(String site) {
        this.site = site;
    }
    public Double getNota() {
        return nota;
    }
    public void setNota(Double nota) {
        this.nota = nota;
    }    
}
package br.com.caelum.cadastro;

import ...

public class FormularioHelper {

    private EditText campoTelefone;
    private EditText campoNome;
    private EditText campoSite;
    private EditText campoEndereco;
    private SeekBar campoNota;
    private Aluno aluno;

    public FormularioHelper(Formularioactivity activity) {
        aluno = new Aluno();

        campoNome = (EditText)activity.findViewById(R.id.Nome);
        campoSite = (EditText)activity.findViewById(R.id.Site);
        campoEndereco = (EditText)activity.findViewById(R.id.Endereco);
        campoTelefone = (EditText)activity.findViewById(R.id.Telefone);
        campoNota = (SeekBar)activity.findViewById(R.id.Nota);
    }
        public Aluno pegaAlunoDoFormulario () {
        String nome = campoNome.getText().toString();
        String endereco = campoEndereco.getText().toString();
        String site = campoSite.getText().toString();
        String telefone = campoTelefone.getText().toString();
        int nota = campoNota.getProgress();

        aluno.setNome(nome);
        aluno.setEndereco(endereco);
        aluno.setTelefone(telefone);
        aluno.setSite(site);
        aluno.setNota(Double.valueOf(nota));

        return aluno;
    }
}

código do Banco de dados:

package br.com.caelum.cadastro.dao;

import ...

public class AlunoDAO extends  SQLiteOpenHelper{

    private static final int VERSAO = 1;
    private static final String DATABASE = "NomeDoBanco";
    private static final String TABELA  = "Alunos";


    public AlunoDAO(Context ctx) {
        super(ctx, DATABASE, null, VERSAO);

    }

    public void onCreate(SQLiteDatabase database) {
        String sql = "CREATE TABLE " + TABELA + 
                " (id INTEGER PRIMARY KEY AUTOINCREMENT," +
                " nome TEXT UNIQUE NOT NULL," +
                " site TEXT," +
                " endereco TEXT," +
                " telefone TEXT," + 
                " nota REAL" +
                ");";

        database.execSQL(sql);
    }

    public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
        String sql = "DROP TABLE IF EXIST" + TABELA + ";";

        database.execSQL(sql);
        onCreate(database);
    }

    public void insere(Aluno aluno) {

        ContentValues cv = new ContentValues();
        cv.put("nome", aluno.getNome());
        cv.put("telefone", aluno.getTelefone());
        cv.put("endereco", aluno.getEndereco());
        cv.put("nota", aluno.getNota());
        cv.put("site", aluno.getSite());

        getWritableDatabase().insert(TABELA, null, cv);

    }

    public List<Aluno> getLista() {
        String sql="SELECT id,nome FROM " + TABELA + ";";
        Cursor c = getReadableDatabase().rawQuery(sql, null);
        List<Aluno> alunos = new ArrayList<Aluno>();

        while (c.moveToNext()) {
            Aluno aluno = new Aluno();
            aluno.setId(c.getLong(c.getColumnIndex("id")));
            aluno.setNome(c.getString(c.getColumnIndex("nome")));

            alunos.add(aluno);

        }
        return alunos;
    }
}
5 respostas

Oi Luis, tudo bem?

Eu testei esses códigos que você colou aqui, e funcionou como esperado. Cadastrou e mostrou na lista.

Está recebendo algum erro?

Abraço.

Testei novamente ele e ainda não esta rodando, aparece o seguinte erro no Logcat:

(1) table Alunos has no column named telefone Error inserting site=Luis.com nome=Luis nota=4.0 endereco=rua luis telefone =54683170

Oi Luis, faz um teste, por favor?

Desinstala completamente a aplicação do emulador ou dispositivo que você está rodando, e depois roda ela de novo?

Avisa aqui se continua com o mesmo erro, ou algo novo?

Muito Obrigado Lucas, deu certo agora, me sentindo um imbecil por não ter feito isso antes heheh

solução!

Oi Luis, que bom que funcionou! :-)

Pelo erro no logcat, acredito que ele já havia criado o banco sem a coluna telefone. Como nao mudamos a versão do banco, ele acaba nao atualizando o banco (pois o banco está criado e ele não chama o onUpgrade) mesmo que você mude a classe AlunoDAO.

Qualquer dúvida é só abrir um novo tópico!

Abraço.