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

Persistência de dados - qual aula?

Bom dia, boa tarde e boa noite pessoal. Estou criando um app que consome dados do The Movie Database, esse app exibe na primeira tela um grid com os posters dos filmes(que vem da api do tmdb) e quando clico ele abre uma tela de detalhes do filme, com sinopse, trailers, reviews, etc. Criei um toggle button nessa activity de detalhes, para que o usuario possa favoritar o filme dele e, quando favoritar, quero salvar em um banco sqlite para exibir uma lista dos filmes favoritos do usuário. Meu problema é o seguinte: criei o banco de dados, e quando o usuario clica no botao para favoritar, ele salva o filme no banco(id, titulo e a key do filme). Porem quando executo a aplicacao novamente, ele vai ignorar que já foi salvo um determinado filme, e vai salvar mais um registro no banco. Preciso bolar uma maneira de verificar, quando os filmes vêm da api, se já existe no banco de dados para alterar o botao do favorito, e também preciso consultar, antes de salvar o filme, se o mesmo já existe no banco ou não. Como posso proceder com isso? Se não me engano, em alguma aula de algum curso de android acho que fizemos isso. Mas faz mto tempo que fiz esses cursos de android aqui

2 respostas
solução!

Olá, Jilles!

Será o 4 vídeo da aula 4 do curso Android I: Crie sua App fantástica com Android Studio? https://cursos.alura.com.br/course/android-studio/task/11355

O código seria esse:

package br.com.alura.agenda.dao;

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

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

import br.com.alura.agenda.modelo.Aluno;

public class AlunoDAO extends SQLiteOpenHelper {

    public AlunoDAO(Context context) {
        super(context, "Agenda", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "CREATE TABLE Alunos (" +
                "id INTEGER PRIMARY KEY, " +
                "nome TEXT NOT NULL, " +
                "endereco TEXT, " +
                "telefone TEXT, " +
                "site TEXT, " +
                "nota REAL);";
        db.execSQL(sql);
    }

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

    }

    public void insere(Aluno aluno) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues dados = obtemDadosDoAluno(aluno);
        db.insert("Alunos", null, dados);
    }

    public void altera(Aluno aluno) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues dados = obtemDadosDoAluno(aluno);
        String[] params = {aluno.getId().toString()};
        db.update("Alunos", dados, "id = ?", params);
    }

    @NonNull
    private ContentValues obtemDadosDoAluno(Aluno aluno) {
        ContentValues dados = new ContentValues();
        dados.put("nome", aluno.getNome());
        dados.put("endereco", aluno.getEndereco());
        dados.put("telefone", aluno.getTelefone());
        dados.put("site", aluno.getSite());
        dados.put("nota", aluno.getNota());
        return dados;
    }

    public List<Aluno> buscaAlunos() {
        String sql = "SELECT * from Alunos;";
        SQLiteDatabase db = getReadableDatabase();
        Cursor c = db.rawQuery(sql, null);
        ArrayList<Aluno> alunos = new ArrayList<>();
        while (c.moveToNext()) {
            Aluno aluno = new Aluno();
            aluno.setId(c.getLong(c.getColumnIndex("id")));
            aluno.setNome(c.getString(c.getColumnIndex("nome")));
            aluno.setEndereco(c.getString(c.getColumnIndex("endereco")));
            aluno.setTelefone(c.getString(c.getColumnIndex("telefone")));
            aluno.setSite(c.getString(c.getColumnIndex("site")));
            aluno.setNota(c.getDouble(c.getColumnIndex("nota")));
            alunos.add(aluno);
        }
        c.close();
        return alunos;
    }

    public void deleta(Aluno aluno) {
        SQLiteDatabase db = getWritableDatabase();
        String[] params = {aluno.getId().toString()};
        db.delete("Alunos", "id = ?", params);
    }

}

Para fazer uma busca por id, seria algo como:

 public Aluno buscaAlunos(Long id) {
         Aluno aluno = null;

        String sql = "SELECT * from Alunos where id = ?;";
        SQLiteDatabase db = getReadableDatabase();
        Cursor c = db.rawQuery(sql, {id.toString()});
        while (c.moveToNext()) {
            aluno =  new Aluno();
            aluno.setId(c.getLong(c.getColumnIndex("id")));
            aluno.setNome(c.getString(c.getColumnIndex("nome")));
            aluno.setEndereco(c.getString(c.getColumnIndex("endereco")));
            aluno.setTelefone(c.getString(c.getColumnIndex("telefone")));
            aluno.setSite(c.getString(c.getColumnIndex("site")));
            aluno.setNota(c.getDouble(c.getColumnIndex("nota")));
            alunos.add(aluno);
        }
        c.close();
        return aluno;
    }

isso isso isso valew :D

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software