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

Buscando alunos no banco

Boa noite pessoal,

Não sei como resolver esse erro... O "this" no método AlunoDAO dao = new AlunoDAO(this); fica sublinhado... Deu algum erro que não consigo resolver. Quando posiciono o cursor sobre a palavra, aparece "Aluno DAO(Context , int) in AlunoDAO cannot be applied to (ListaAlunosActivity)".

package br.com.alura.agenda;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;

import java.util.List;

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

public class ListaAlunosActivity extends AppCompatActivity {

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

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

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

        Button novoAluno = (Button) findViewById(R.id.novo_aluno);
        novoAluno.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intentVaiProFormulario = new Intent(ListaAlunosActivity.this, FormularioActivity.class);
                startActivity(intentVaiProFormulario);
            }

        });
    }
}
13 respostas

Parece que no seu construtor do AlunoDAO você também recebe um int, só que vc não ta passando esse int como segundo argumento na instanciação.

Então, eu saquei isso no erro, mas na aula o professor faz exatamente assim:

public class ListaAlunosActivity extends AppCompatActivity  {  

    @Override  
    protected void onCreate(Bundle  savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_lista_alunos);  
    AlunoDAO dao = new AlunoDAO(this);
    List<Aluno> alunos = dao.buscaAlunos();
    dao.close();"

Daí não sei como eu transformo o que foi dado na aula pelo que está sendo solicitado no AndroidStudio.

Então talvez vc tenha escrito errada a classe AlunoDAO errada. Não sei exatamente pra que serve esse int como segundo argumento.. vc pode tirar.

Mas já tá sem o int... Aí que tá.

Engraçado é que a classe aluno DAO tá sem nenhum termo sublinhado, mas o mesmo argumento no método "AlunoDAO dao = new AlunoDAO(this);" tá sublinhado nas duas classes que fazem uso da "AlunoDAO".

Bom, aí só me resta pedir para vc colocar o código completo aqui para olharmos.

Classe AlunoDAO.java

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 java.util.ArrayList;
import java.util.List;

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

/**
 * Created by Júlia Nunes on 13/09/2016.
 */
public class AlunoDAO extends SQLiteOpenHelper {


    public AlunoDAO(Context context, int version) {
        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) {
        String sql = "DROP TABLE IF EXISTS Alunos;";
        db.execSQL(sql);
        onCreate(db);
    }

    public void insere(Aluno aluno) {
        SQLiteDatabase db = getWritableDatabase();

        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());

        db.insert("Alunos", null, dados);
    }

    public List<Aluno> buscaAlunos() {
        String sql = "SELECT * FROM Alunos;";
        SQLiteDatabase db = getReadableDatabase();
        Cursor c = db.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")));
            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 null;
    }
}

Classe Aluno.java

package br.com.alura.agenda.modelo;

/**
 * Created by Júlia Nunes on 13/09/2016.
 */
public class Aluno {
    private Long id;
    private String nome;
    private String endereco;
    private String telefone;
    private String site;
    private Double nota;

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

Classe FormularioActivity.java

package br.com.alura.agenda;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RatingBar;
import android.widget.Toast;

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

public class FormularioActivity extends AppCompatActivity {

    private FormularioHelper helper;

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

        helper = new FormularioHelper(this);

        }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_formulario, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_formulario_ok:
                Aluno aluno = helper.pegaAluno();
                AlunoDAO dao = new AlunoDAO(this);
                dao.insere(aluno);
                dao.close();

                Toast.makeText(FormularioActivity.this, "Aluno " + aluno.getNome() + " salvo!", Toast.LENGTH_SHORT).show();

                finish();
                break;
        }

        return super.onOptionsItemSelected(item);
    }
}

Classe ListaAlunosActivity.java

package br.com.alura.agenda;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;

import java.util.List;

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

public class ListaAlunosActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lista_alunos);
        AlunoDAO dao = new AlunoDAO(this, this);
        List<Aluno> alunos = dao.buscaAlunos();
        dao.close();

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

        Button novoAluno = (Button) findViewById(R.id.novo_aluno);
        novoAluno.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intentVaiProFormulario = new Intent(ListaAlunosActivity.this, FormularioActivity.class);
                startActivity(intentVaiProFormulario);
            }

        });
    }
}

Na classe ListaAlunosActivity.java que eu mandei agora tá assim porque eu tava testando:

AlunoDAO dao = new AlunoDAO(this, this);

Mas o correto é assim, mesmo:

AlunoDAO dao = new AlunoDAO(this);

O erro permanece. :c

solução!

A sua classe AlunoDAO recebe sim o int como segundo argumento, aqui:

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

Só que no seu código vc passa o this duas 2x.

AlunoDAO dao = new AlunoDAO(this, this);

Altera essa linha de instanciação para AlunoDAO dao = new AlunoDAO(this);. Altera seu construtor do AlunoDAO para ficar assim:

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

Acho interessante notificar o professor pra arrumar lá na aula. A correção funcionou! Mas na aula "Buscando Alunos no Banco" do módulo 4. tá daquele jeito lá. Não sei se é interessante.

Enfim, obrigada pelo auxílio, Alberto! Tava com medo de não conseguir prosseguir com os estudos hoje e a pronta resposta ajudou bastante, visto que não fiquei travada aqui sem resposta.

Boa noite!

Puts. Na hora de rodar a aplicação, deu "Unfortunately, Agenda has stopped." Não sei o que houve. Droga...

Estou tendo o mesmo pro que você Júlia. ("Unfortunately, Agenda has stopped.") Conseguiu resolver?