1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Android - Sistema de cadastro

Bom dia pessoal!

Estou com um problema na criação do meu aplicativo de cadastro que eu estou desenvolvendo no android, até o momento eu criei um layout em forma de lista para mostrar os alunos cadastrados e uma outro layout para adicionar novos alunos, criei o menu com a opção novo para chamar a outra tela de cadastro, até aqui está tudo perfeito, mas na hora que eu clico no botão inserir era para meu aplicativo adicionar um novo aluno na lista, porém isso não está acontecendo.

Segue abaixo os códigos que eu criei até o momento:

Minha layout inicial lista.xml é bem simples, já que todos os comandos necessários eu inseri na classe que manipula essa layout:

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

    <ListView
        android:id="@+id/listaAlunos"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content">
    </ListView>

</LinearLayout>

Essa é a classe que manipula as ações da layout lista

package caelum.com.br.cadastrocaelum;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import java.util.Arrays;
import java.util.List;

import br.com.caelum.cadastro.dao.AlunoDAO;
import br.com.caelum.modelo.Aluno;


public class ListaAlunos extends Activity {

    private ListView listaAlunos;

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

        AlunoDAO dao = new AlunoDAO(this);
        List<Aluno> alunos = dao.getLista();
        dao.close();


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

        listaAlunos = (ListView) findViewById(R.id.listaAlunos);
        listaAlunos.setAdapter(adapter);
        listaAlunos.setClickable(true);
        listaAlunos.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> adapter, View view, int posicao, long id){
            Toast.makeText(ListaAlunos.this, "Posição selecionada: " + posicao, Toast.LENGTH_LONG).show();
            }
        });

        listaAlunos.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

            public boolean onItemLongClick(AdapterView<?> adapter, View view, int posicao, long id) {
            registerForContextMenu(listaAlunos);

            return false;
            }
        });
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuItem novo = menu.add(0, 0, 0, "Novo");
        novo.setIcon(R.drawable.novo);

        MenuItem sincronizar = menu.add(0, 1, 0, "Sincronizar");
        sincronizar.setIcon(R.drawable.sync);

        MenuItem galeria = menu.add(0, 2, 0, "Galeria");
        galeria.setIcon(R.drawable.add_foto);

        MenuItem mapa = menu.add(0, 3, 0, "Mapa");
        mapa.setIcon(R.drawable.localizacao);
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.lista_alunos, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        if(item.getItemId() == 0) {
            startActivity(new Intent(this, Formulario.class));
        }
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return false;
    }

    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo){
        super.onCreateContextMenu(menu, v, menuInfo);

        menu.add(0, 0, 0, "Ligar");
        menu.add(0, 1, 0, "Envir SMS");
        menu.add(0, 2, 0, "Achar no Mapa");
        menu.add(0, 3, 0, "Navegar no site");
        menu.add(0, 4, 0, "Deletar");
        menu.add(0, 5, 0, "Enviar E-mail");
    }

    public boolean onContextItemSelected(MenuItem item) {
        return super.onContextItemSelected(item);
    }
}

A segunda layout formulario.xml, que é uma ficha de cadastro:

<?xml version="1.0" encoding="utf-8"?>

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical">

        <ImageButton
            android:id="@+id/imagem"
            android:src="@drawable/noimage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal">
        </ImageButton>

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

        <EditText
            android:id="@+id/nome"
            android:hint="Digite o nome aqui"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content">
        </EditText>

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

        <EditText
            android:id="@+id/telefone"
            android:hint="Digite o telefone aqui"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content">
        </EditText>

        <TextView
            android:text="Endereço:"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content">
        </TextView>

        <EditText
            android:id="@+id/endereco"
            android:hint="Digite o nome aqui"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content">
        </EditText>

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

        <EditText
            android:id="@+id/site"
            android:hint="Digite seu site aqui"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content">
        </EditText>

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

        <RatingBar
            android:id="@+id/nota"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:numStars="5">
        </RatingBar>

        <Button
            android:id="@+id/botao"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="Inserir">
        </Button>


    </LinearLayout>
</ScrollView>

A classe que manipula as ações da layout formulario.xml

package caelum.com.br.cadastrocaelum;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RatingBar;
import android.widget.Toast;

import br.com.caelum.cadastro.dao.AlunoDAO;
import br.com.caelum.modelo.Aluno;

/**
 * Created by CarLoSlMiTo2 on 30/06/2014.
 */
public class Formulario extends Activity{

    private Aluno aluno = new Aluno();

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

        Button botao = (Button) findViewById(R.id.botao);
        botao.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){
                EditText nome = (EditText) findViewById(R.id.nome);
                EditText telefone = (EditText) findViewById(R.id.telefone);
                EditText site = (EditText) findViewById(R.id.site);
                RatingBar nota = (RatingBar) findViewById(R.id.nota);
                EditText endereco = (EditText) findViewById(R.id.endereco);

                aluno.setNome(nome.getEditableText().toString());
                aluno.setTelefone(telefone.getEditableText().toString());
                aluno.setSite(site.getEditableText().toString());
                aluno.setNota(nota.getRating());
                aluno.setEndereco(endereco.getEditableText().toString());

                AlunoDAO dao = new AlunoDAO(Formulario.this);
                dao.inserir(aluno);
                dao.close();

                finish();
            }
        });
    }
}

Classe contendo os atributos que o novo aluno deve ter:

package br.com.caelum.modelo;

/**
 * Created by CarLoSlMiTo2 on 30/06/2014.
 */
public class Aluno {
    private Long id;
    private String nome;
    private String telefone;
    private String endereco;
    private String site;
    private double nota;
    private String foto;

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getTelefone() {
        return telefone;
    }

    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }

    public String getEndereco() {
        return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

    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;
    }

    public String getFoto() {
        return foto;
    }

    public void setFoto(String foto) {
        this.foto = foto;
    }
}

E por ultima a classe responsavel pela criação do banco de dados SQLite:

package br.com.caelum.cadastro.dao;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import java.util.ArrayList;
import java.util.List;

import br.com.caelum.modelo.Aluno;

/**
 * Created by CarLoSlMiTo2 on 30/06/2014.
 */
public class AlunoDAO extends SQLiteOpenHelper {

    private static final int VERSAO = 2;
    private static final String TABELA = "Aluno";
    private static final String[] COLS = {"id", "nome", "telefone", "endereco", "site", "nota", "foto"};

    public AlunoDAO(Context context) {
        super(context, TABELA, null, VERSAO);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        StringBuilder sb = new StringBuilder();
        sb.append("CREATE TABLE " + TABELA + " ");
        sb.append("(id INTEGER PRIMARY KEY, ");
        sb.append(" nome TEXT UNIQUE NOT NULL, ");
        sb.append(" telefone TEXT, ");
        sb.append(" endereco TEXT, ");
        sb.append(" site TEXT, ");
        sb.append(" nota REAL, ");
        sb.append(" foto TEXT);");
        db.execSQL(sb.toString());
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        StringBuilder sb = new StringBuilder();
        sb.append("DROP TABLE IF EXISTS " + TABELA);
        db.execSQL(sb.toString());
        onCreate(db);

    }

    public void inserir(Aluno aluno) {
        ContentValues values = new ContentValues();
        values.put("nome", aluno.getNome());
        values.put("telefone", aluno.getTelefone());
        values.put("endereco", aluno.getEndereco());
        values.put("site", aluno.getSite());
        values.put("nota", aluno.getNota());
        values.put("foto", aluno.getFoto());

        getWritableDatabase().insert(TABELA, null, values);
    }

    public List<Aluno> getLista(){
        List<Aluno> alunos = new ArrayList<Aluno>();

        Cursor c = getWritableDatabase().query(TABELA,COLS, null, null, null, null, null);

        while(c.moveToNext()){
            Aluno aluno = new Aluno();
            aluno.setId(c.getLong(0));
            aluno.setNome(c.getString(1));
            aluno.setTelefone(c.getString(2));
            aluno.setEndereco(c.getString(3));
            aluno.setSite(c.getString(4));
            aluno.setNota(c.getDouble(5));
            aluno.setFoto(c.getString(6));
        }
        c.close();

        return alunos;
    }
}

Minha primeira layout lista.xml está assim: http://imagizer.imageshack.us/a/img842/7030/1z5kj.jpg

Meu segundo layout formulario.xml: http://imageshack.com/a/img823/4966/r6plq.jpg

Não estou conseguindo identificar o por que de não está adicionando o novo aluno na lista. Se alguem identificar o erro me mostrem por favor.

Agredeço desde já.

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags android banco-de-dados ou faça a sua própria pergunta.