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

Salvar a resposta do json no banco de dados

Gostaria de saber, como salvar as respostas do json, que aparece no toast, no banco de dados? No curso o toast retorna a quantidade de alunos e a média. Logo, como salvar esses dados no banco?

24 respostas

Leandro, suponho que você tenha feito o curso de Android I que é pré-requisito, certo? Ele ensina a salvar seus modelos no banco de dados.

Resuminho do que você vai encontrar aqui na aula: 1. Criar um modelo que represente a quantidade de alunos e a média. Talvez chamado Media? 2. Criar um DAO que extende SQLiteOpenHelper 3. Criar a tabela com uma query create table no método onCreate do DAO. 4. Inserir os valores usando uma query de insert com os valores da sua Media

Deixei mais aberto para que você possa pesquisar e descobrir por si mesmo! Se precisar de uma ajuda bem mais específica, volte aqui e chame! =)

Certo. Mas como atribuir os valores mostrados no toast ( de reposta do json), nas variáveis da exemplo: "média" e "quantidade". Para que possa ser salvas no banco e mostradas no layout de "médias obtidas" que criei ?

Pode me indicar a atividade em que você cria o toast?

sim,

no Curso: Android II Integrações com Apps e recursos do device.

Aula: 5. Integração com o WebService

Olá Leandro!

Só complementando o que o Marco já explicou, para ler os dados a partir do JSON recebido você pode utilizar a classe JSONObject como no código abaixo:

try {
    // aqui vc pode usar a resposta da requisição
    String jsonDeResposta = "{media: 5.0, quantidade: 2}";
    JSONObject json = new JSONObject(jsonDeResposta);
    double media = json.getDouble("media");
    int quantidade = json.getInt("quantidade");
    Log.i("LOG", "Media : " + media);
    Log.i("LOG", "Quantidade : " + quantidade);
} catch (JSONException e) {
    e.printStackTrace();
}

Tenho também que criar um layout para poder mostrar o resultado salvo correto?

Olá, esse codigo colocaria no metodo "onPostExecute" da classe "EnviaAlunosTask"?

segue as classes feita para o recebimento e salvamento no banco de dados..

public class MediaDasNotas {
    private Long id;
    private Double quantidade;
    private String nota;

    public Long getId() {
        return id;
    }

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

    public Double getQuantidade() {
        return quantidade;
    }

    public void setQuantidade(Double quantidade) {
        this.quantidade = quantidade;
    }

    public String getNota() {
        return nota;
    }

    public void setNota(String nota) {
        this.nota = nota;
    }

    @Override
    public String toString() {
        return getId() + " - " + getQuantidade();
    }
}

a classe DAO:

public class MediaDasNotasDAO extends SQLiteOpenHelper {


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

    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "CREATE TABLE MediaDasNotas (id INTEGER PRIMARY KEY," +
                "quantidade INTEGER NOT NULL, " +
                "media REAL);";
        db.execSQL(sql);
    }

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

    }

    // ----- metodo inserir  -----
    public void insereMediaDasNotas(MediaDasNotas mediaDasNotas) {
        SQLiteDatabase db = getWritableDatabase();

        ContentValues dadosDaMedia = pegaDadosMediaDasNotas(mediaDasNotas);

        db.insert("MediaDasNotas" , null, dadosDaMedia);
    }

    // ----- pegando dados do da mediaDasNotas alterado  -----
    @NonNull
    private ContentValues pegaDadosMediaDasNotas(MediaDasNotas mediaDasNotas) {
        ContentValues dadosDaMedia = new ContentValues();

        dadosDaMedia.put("quantidade", mediaDasNotas.getQuantidade());
        dadosDaMedia.put("media", mediaDasNotas.getNota());
        return dadosDaMedia;
    }

}

corrigindo.... me corrijam se eu estiver errado. Mas precisava criar os seguinte arquivos:

ADAPTER:

public class MediaDasNotasAdapter extends BaseAdapter {
    private final List<MediaDasNotas> media;
    private final Context context;

    //esse construtor recebe a lista de alunos
    public MediaDasNotasAdapter(Context context, List<MediaDasNotas> media) {
        this.context  = context;
        this.media = media;
    }

    //é implementado 4 metodos abaixo para o baseAdapter funcionar

    //segundo - serve para devolver os itens de uma lista
    @Override
    public int getCount() {
        return media.size();
    }

    @Override
    public Object getItem(int position) {
        return media.get(position);
    }

    //retorna o aluno pelo id (mas poderia ser por outro campo)
    @Override
    public long getItemId(int position) {
        return media.get(position).getId();
    }

    //primeiro - metodo mais importante. serve para mostrar os dados na lista
    @Override //o convertView serve para preencher a lista quando os intens forem deslizados para cima ou para baixo
    public View getView(int position, View convertView, ViewGroup parent) {//o parent serve para definir o tamanho da imagem, conforme o layout
        //retorna a lista
        MediaDasNotas mediaNota = media.get(position);
        //inflando a listView
        LayoutInflater inflater = LayoutInflater.from(context);

        //Aqui reaproveitamos a convertView caso ela exista
        View view = convertView;
        if (view == null) {
            view = inflater.inflate(R.layout.list_item_mediaDosAlunos, parent, false);
        }
        TextView campoQuantidade = (TextView) view.findViewById(R.id.item_quantidade);
        campoQuantidade.setText(String.valueOf(mediaNota.getQuantidade()));

        TextView campoMedia = (TextView) view.findViewById(R.id.item_media);
        campoMedia.setText(mediaNota.getNota());

        return view;
    }
}

DAO:

public class MediaDasNotasDAO extends SQLiteOpenHelper {


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

    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "CREATE TABLE MediaDasNotas (id INTEGER PRIMARY KEY," +
                "quantidade INTEGER NOT NULL, " +
                "media REAL);";
        db.execSQL(sql);
    }

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

    }

    // ----- metodo inserir  -----
    public void insereMediaDasNotas(MediaDasNotas mediaDasNotas) {
        SQLiteDatabase db = getWritableDatabase();

        ContentValues dadosDaMedia = pegaDadosMediaDasNotas(mediaDasNotas);

        db.insert("MediaDasNotas" , null, dadosDaMedia);
    }

    public List<MediaDasNotas> buscaMediaAlunos() {
        SQLiteDatabase db = getReadableDatabase();
        Cursor c = db.rawQuery("SELECT * FROM MediaDasNotas;", null);


        List<MediaDasNotas> media = new ArrayList<MediaDasNotas>();
        while (c.moveToNext()) {
            MediaDasNotas mediaNotas = new MediaDasNotas();
            mediaNotas.setId(c.getLong(c.getColumnIndex("id")));
            mediaNotas.setQuantidade(new Integer(c.getColumnIndex("quantidade")));
            mediaNotas.setNota(c.getDouble(c.getColumnIndex("nota")));

            media.add(mediaNotas);
        }
        c.close();
        return media;
    }

    // ----- pegando dados do da mediaDasNotas alterado  -----
    @NonNull
    private ContentValues pegaDadosMediaDasNotas(MediaDasNotas mediaDasNotas) {
        ContentValues dadosDaMedia = new ContentValues();

        dadosDaMedia.put("quantidade", mediaDasNotas.getQuantidade());
        dadosDaMedia.put("media", mediaDasNotas.getNota());
        return dadosDaMedia;
    }

}

MODELO:

public class MediaDasNotas implements Serializable {
    private Long id;
    private int quantidade;
    private Double nota;

    public Long getId() {
        return id;
    }

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

    public int getQuantidade() {
        return quantidade;
    }

    public void setQuantidade(Integer quantidade) {
        this.quantidade = quantidade;
    }

    public Double getNota() {
        return nota;
    }

    public void setNota(double nota) {
        this.nota = nota;
    }

    @Override
    public String toString() {
        return getId() + " - " + getQuantidade();
    }
}

CLASSE MediaDasNotasActivity:

public class MediaDasNotasActivity extends AppCompatActivity {

    private ListView listaDasMediaAlunos;

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

        listaDasMediaAlunos = (ListView) findViewById(R.id.lista_mediaDasNotas);
        listaDasMediaAlunos.setEmptyView(findViewById(R.id.list_media_vazia));

    }

    public void carregaMediaAlunos(){
        MediaDasNotasDAO daoMedia = new MediaDasNotasDAO(this);
        List<MediaDasNotas> media = daoMedia.buscaMediaAlunos();
        daoMedia.close();

        //ArrayAdapter<Aluno> adapter = new ArrayAdapter<Aluno>(this, android.R.layout.activity_list_item, alunos);
        //criando um AlunosAdapter
        MediaDasNotasAdapter adapterMedia = new MediaDasNotasAdapter(this, media);//alem de passar um aluno tem q ser passado um contexto (this) para o adapter.
        listaDasMediaAlunos.setAdapter(adapterMedia);
    }
    @Override
    protected void onResume() {
        super.onResume();
        carregaMediaAlunos();
    }
}

ARQUIVOS LAYOUT:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_media_das_notas"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="br.com.cadastroDeAluno.MediaDasNotasActivity">

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

    <include layout="@layout/layout_empty_mediaDosAlunos"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>

ITEM DA LISTA:

LISTVIEW

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

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/item_quantidade"
        android:textSize="20sp"
        android:textStyle="bold"
        android:paddingLeft="10dp"/>


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/item_media"
        android:textSize="16sp"
        android:paddingLeft="10dp"
        android:paddingTop="8dp"/>

</LinearLayout>

LISTA VAZIA:

<?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:id="@+id/empty_view_root"
    android:gravity="center">

    <TextView
        android:id="@+id/list_media_vazia"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:drawableTop="@drawable/ic_empty_list"
        android:gravity="center"
        android:text="@string/txt_lista_vazia_mediaDosAlunos"
        android:textColor="#8450b3"
        android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>

Olá Leandro,

Isso mesmo, você precisa colocar o código que postei no onPostExecute onde você possui a string de resposta com a média e a quantidade de alunos. Daí é só armazenar os valores lidos no seu modelo e depois pedir para o seu DAO salvar.

As classes que você criou adicionalmente também são necessárias pois pelo que entendi você quer ter uma tela com a listagem de todas as médias calculadas.

isso. quero listar todas as requisições que fizer no servidor. e salva-las.

olá,

bom.. a aplicação está instalando. porém, ao clicar no botão "R.id.menu_enviar_notas:", a aplicação fecha. nem se quer mostra a tela de "MediaDasNotas.activity".

erro que mostra: FATAL EXCEPTION

linhas..:

at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1285)
                      at br.com.cadastroDeAluno.dao.MediaDasNotasDAO.buscaMediaAlunos(MediaDasNotasDAO.java:50)
                      at br.com.cadastroDeAluno.MediaDasNotasActivity.carregaMediaAlunos(MediaDasNotasActivity.java:30)
                      at br.com.cadastroDeAluno.MediaDasNotasActivity.onResume(MediaDasNotasActivity.java:41)
                      at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1268)

codigo:

public class MediaDasNotasDAO extends SQLiteOpenHelper {


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

    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "CREATE TABLE MediaDasNotas (id INTEGER PRIMARY KEY," +
                "quantidade INTEGER NOT NULL, " +
                "media REAL);";
        db.execSQL(sql);
    }

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

    }

    // ----- metodo inserir  -----
    public void insereMediaDasNotas(MediaDasNotas mediaDasNotas) {
        SQLiteDatabase db = getWritableDatabase();

        ContentValues dadosDaMedia = pegaDadosMediaDasNotas(mediaDasNotas);

        db.insert("MediaDasNotas" , null, dadosDaMedia);
    }

    public List<MediaDasNotas> buscaMediaAlunos() {
        SQLiteDatabase db = getReadableDatabase();
        Cursor c = db.rawQuery("SELECT * FROM MediaDasNotas;", null);

        List<MediaDasNotas> media = new ArrayList<MediaDasNotas>();
        while (c.moveToNext()) {
            MediaDasNotas mediaNotas = new MediaDasNotas();
            mediaNotas.setId(c.getLong(c.getColumnIndex("id")));
            mediaNotas.setQuantidade(c.getInt(c.getColumnIndex("quantidade")));
            mediaNotas.setNota(c.getDouble(c.getColumnIndex("nota")));

            media.add(mediaNotas);
        }
        c.close();
        return media;
    }

    // ----- pegando dados do da mediaDasNotas alterado  -----
    @NonNull
    private ContentValues pegaDadosMediaDasNotas(MediaDasNotas mediaDasNotas) {
        ContentValues dadosDaMedia = new ContentValues();

        dadosDaMedia.put("quantidade", mediaDasNotas.getQuantidade());
        dadosDaMedia.put("media", mediaDasNotas.getNota());
        return dadosDaMedia;
    }

}

Olá Leandro,

Posta aqui a excepção completa pois a que você postou não tem a linha onde temos mais informações sobre o erro.

Além disso, dá uma olhada nessa linha:

mediaNotas.setNota(c.getDouble(c.getColumnIndex("nota")));

Aqui você está tentando acessar a coluna nota na sua tabela MediaDasNotas mas quando você criou a tabela, essa coluna foi chamada de media. Faça a correção nessa linha e faça um novo teste pra saber se ajuda.

codigo do AlunoDAO:

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," +
                "caminhoFoto TEXT," +
                "nota REAL);";
        db.execSQL(sql);
    }

    public void onUpgrade(SQLiteDatabase db, int versaoAntiga, int versaoNova) {
        String sql = "";
        switch (versaoAntiga){
            case 1:
                sql = "ALTER TABLE Alunos ADD COLUMN caminhoFoto text;";
                db.execSQL(sql);
        }
    }

    // ----- metodo inserir  -----
    public void insere(Aluno aluno) {
        SQLiteDatabase db = getWritableDatabase();

        ContentValues dados = pegaDadosAluno(aluno);

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

    public List<Aluno> buscaAlunos() {
        SQLiteDatabase db = getReadableDatabase();
        Cursor c = db.rawQuery("SELECT * FROM Alunos;", 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")));
            aluno.setCaminhoFoto(c.getString(c.getColumnIndex("caminhoFoto")));
            alunos.add(aluno);
        }
        c.close();
        return alunos;
    }

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

    // ----- pegando dados do aluno alterado  -----
    @NonNull
    private ContentValues pegaDadosAluno(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());
        dados.put("caminhoFoto", aluno.getCaminhoFoto());
        return dados;
    }

    // ---- metodo alterar ----
    public void altera(Aluno aluno) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues dados = pegaDadosAluno(aluno);

        String [] params = {aluno.getId().toString()};
        db.update("Alunos", dados, "id = ?", params);
    }
}

Obs.: o AlunoDAO está funcionando corretamente. Acredito que o problema esteja na classe: "MediaDasNotasDAO". Pois, acretido que a app não está criando a tabela. tendo em vista que estão em classes separadas.

como posso resolver esse problema?

corrigi. porém o mesmo erro aparece:

erro:

E/SQLiteLog: (1) no such table: MediaDasNotas
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: br.com.cadastroDeAluno, PID: 8337
                  java.lang.RuntimeException: Unable to resume activity {br.com.cadastroDeAluno/br.com.cadastroDeAluno.MediaDasNotasActivity}: android.database.sqlite.SQLiteException: no such table: MediaDasNotas (code 1): , while compiling: SELECT * FROM MediaDasNotas;
                      at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3334)
                      at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3365)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2672)
                      at android.app.ActivityThread.-wrap11(ActivityThread.java)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1494)
                      at android.os.Handler.dispatchMessage(Handler.java:111)
                      at android.os.Looper.loop(Looper.java:207)
                      at android.app.ActivityThread.main(ActivityThread.java:5776)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
                   Caused by: android.database.sqlite.SQLiteException: no such table: MediaDasNotas (code 1): , while compiling: SELECT * FROM MediaDasNotas;
                      at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
                      at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:896)
                      at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:507)
                      at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
                      at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
                      at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
                      at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
                      at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1346)
                      at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1285)
                      at br.com.cadastroDeAluno.dao.MediaDasNotasDAO.buscaMediaAlunos(MediaDasNotasDAO.java:50)
                      at br.com.cadastroDeAluno.MediaDasNotasActivity.carregaMediaAlunos(MediaDasNotasActivity.java:32)
                      at br.com.cadastroDeAluno.MediaDasNotasActivity.onResume(MediaDasNotasActivity.java:43)
                      at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1268)
                      at android.app.Activity.performResume(Activity.java:6690)
                      at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3319)
                      at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3365) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2672) 
                      at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1494) 
                      at android.os.Handler.dispatchMessage(Handler.java:111) 
                      at android.os.Looper.loop(Looper.java:207) 
                      at android.app.ActivityThread.main(ActivityThread.java:5776) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679) 
I/System: FinalizerDaemon: finalize objects = 61
D/OpenGLRenderer: ~CanvasContext() 0x7f839aa800
D/OpenGLRenderer: ~CanvasContext() 0x7f6df62000
D/OpenGLRenderer: ~CanvasContext() 0x7f6df65800
D/OpenGLRenderer: ~CanvasContext() 0x7f6bd64000
D/OpenGLRenderer: ~CanvasContext() 0x7f6bd67800
D/OpenGLRenderer: ~CanvasContext() 0x7f6dc36000

codigo da classe MediaDasNotasDAO:

public class MediaDasNotasDAO extends SQLiteOpenHelper {


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

    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "CREATE TABLE MediaDasNotas (id INTEGER PRIMARY KEY," +
                "quantidade INTEGER, " +
                "media REAL);";
        db.execSQL(sql);
    }

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

    }

    // ----- metodo inserir  -----
    public void insereMediaDasNotas(MediaDasNotas mediaDasNotas) {
        SQLiteDatabase db = getWritableDatabase();

        ContentValues dadosDaMedia = pegaDadosMediaDasNotas(mediaDasNotas);

        db.insert("MediaDasNotas" , null, dadosDaMedia);
    }

    public List<MediaDasNotas> buscaMediaAlunos() {
        SQLiteDatabase db = getReadableDatabase();
        Cursor c = db.rawQuery("SELECT * FROM MediaDasNotas;", null);

        List<MediaDasNotas> media = new ArrayList<MediaDasNotas>();
        while (c.moveToNext()) {
            MediaDasNotas mediaNotas = new MediaDasNotas();
            mediaNotas.setId(c.getLong(c.getColumnIndex("id")));
            mediaNotas.setQuantidade(c.getInt(c.getColumnIndex("quantidade")));
            mediaNotas.setNota(c.getDouble(c.getColumnIndex("media")));

            media.add(mediaNotas);
        }
        c.close();
        return media;
    }

    // ----- pegando dados do da mediaDasNotas alterado  -----
    @NonNull
    private ContentValues pegaDadosMediaDasNotas(MediaDasNotas mediaDasNotas) {
        ContentValues dadosDaMedia = new ContentValues();

        dadosDaMedia.put("quantidade", mediaDasNotas.getQuantidade());
        dadosDaMedia.put("media", mediaDasNotas.getNota());
        return dadosDaMedia;
    }

}

AlunoDAO:

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," +
                "caminhoFoto TEXT," +
                "nota REAL);";
        db.execSQL(sql);
    }

    public void onUpgrade(SQLiteDatabase db, int versaoAntiga, int versaoNova) {
        String sql = "";
        switch (versaoAntiga){
            case 1:
                sql = "ALTER TABLE Alunos ADD COLUMN caminhoFoto text;";
                db.execSQL(sql);
        }
    }

    // ----- metodo inserir  -----
    public void insere(Aluno aluno) {
        SQLiteDatabase db = getWritableDatabase();

        ContentValues dados = pegaDadosAluno(aluno);

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

    public List<Aluno> buscaAlunos() {
        SQLiteDatabase db = getReadableDatabase();
        Cursor c = db.rawQuery("SELECT * FROM Alunos;", 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")));
            aluno.setCaminhoFoto(c.getString(c.getColumnIndex("caminhoFoto")));
            alunos.add(aluno);
        }
        c.close();
        return alunos;
    }

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

    // ----- pegando dados do aluno alterado  -----
    @NonNull
    private ContentValues pegaDadosAluno(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());
        dados.put("caminhoFoto", aluno.getCaminhoFoto());
        return dados;
    }

    // ---- metodo alterar ----
    public void altera(Aluno aluno) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues dados = pegaDadosAluno(aluno);

        String [] params = {aluno.getId().toString()};
        db.update("Alunos", dados, "id = ?", params);
    }
}

Olá Leandro!

De acordo com a exception, a sua tabela MediaDasNotas não foi mesmo criada. Isso pode estar acontecendo porque pode existir alguma conexão aberta com o banco de dados. Verifique se você está sempre fechando os seus DAO após utilizá-los em todo código da aplicação.

tentei aqui mais a pricipio todos os fechamento coloquei.

Olá Leandro,

Vamos dar uma olhada nas suas activities então. Posta aqui os códigos de todas activities do seu aplicativo.

package br.com.cadastroDeAluno.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.List;

import br.com.cadastroDeAluno.R;
import br.com.cadastroDeAluno.modelo.MediaDasNotas;

/**
 * Created by Leandro on 21/10/2016.
 */
public class MediaDasNotasAdapter extends BaseAdapter {
    private final List<MediaDasNotas> media;
    private final Context context;

    //esse construtor recebe a lista de alunos
    public MediaDasNotasAdapter(Context context, List<MediaDasNotas> media) {
        this.context  = context;
        this.media = media;
    }

    //é implementado 4 metodos abaixo para o baseAdapter funcionar

    //segundo - serve para devolver os itens de uma lista
    @Override
    public int getCount() {
        return media.size();
    }

    @Override
    public Object getItem(int position) {
        return media.get(position);
    }

    //retorna o aluno pelo id (mas poderia ser por outro campo)
    @Override
    public long getItemId(int position) {
        return media.get(position).getId();
    }

    //primeiro - metodo mais importante. serve para mostrar os dados na lista
    @Override //o convertView serve para preencher a lista quando os intens forem deslizados para cima ou para baixo
    public View getView(int position, View convertView, ViewGroup parent) {//o parent serve para definir o tamanho da imagem, conforme o layout
        //retorna a lista
        MediaDasNotas mediaNota = media.get(position);
        //inflando a listView
        LayoutInflater inflater = LayoutInflater.from(context);

        //Aqui reaproveitamos a convertView caso ela exista
        View view = convertView;
        if (view == null) {
            view = inflater.inflate(R.layout.list_item_media_dos_alunos, parent, false);
        }
        TextView campoQuantidade = (TextView) view.findViewById(R.id.item_quantidade);
        campoQuantidade.setText(String.valueOf(mediaNota.getQuantidade()));

        TextView campoMedia = (TextView) view.findViewById(R.id.item_media);
        campoMedia.setText(Double.toString(mediaNota.getNota()));

        return view;
    }
}
public class AlunosAdapter extends BaseAdapter {

    private final List<Aluno> alunos;
    private final Context context;

    //esse construtor recebe a lista de alunos
    public AlunosAdapter(Context context, List<Aluno> alunos) {
        this.context  = context;
        this.alunos = alunos;
    }

    //é implementado 4 metodos abaixo para o baseAdapter funcionar

    //segundo - serve para devolver os itens de uma lista
    @Override
    public int getCount() {
        return alunos.size();
    }

    @Override
    public Object getItem(int position) {
        return alunos.get(position);
    }

    //retorna o aluno pelo id (mas poderia ser por outro campo)
    @Override
    public long getItemId(int position) {
        return alunos.get(position).getId();
    }

    //primeiro - metodo mais importante. serve para mostrar os dados na lista
    @Override //o convertView serve para preencher a lista quando os intens forem deslizados para cima ou para baixo
    public View getView(int position, View convertView, ViewGroup parent) {//o parent serve para definir o tamanho da imagem, conforme o layout
        //retorna a lista
        Aluno aluno = alunos.get(position);
        //inflando a listView
        LayoutInflater inflater = LayoutInflater.from(context);
        //Aqui reaproveitamos a convertView caso ela exista
        View view = convertView;
        if (view == null) {
            view = inflater.inflate(R.layout.list_item, parent, false);
        }
            TextView campoNome = (TextView) view.findViewById(R.id.item_nome);
            campoNome.setText(aluno.getNome());

            TextView campoTelefone = (TextView) view.findViewById(R.id.item_telefone);
            campoTelefone.setText(aluno.getTelefone());

            TextView campoEndereco = (TextView) view.findViewById(R.id.item_endereco);
            if (campoEndereco != null) {   //esse condição serve p/ verificar se a tela está em "landscape". Se tiver mostra o endereço. Caso contrario, nao mostra.
                campoEndereco.setText(aluno.getEndereco());
            }

            TextView campoSite = (TextView) view.findViewById(R.id.item_site);
            if (campoSite != null) {      //esse condição serve p/ verificar se a tela está em "landscape". Se tiver mostra o site. Caso contrario, não mostra.
                campoSite.setText(aluno.getSite());
            }

            ImageView campoFoto = (ImageView) view.findViewById(R.id.item_foto);

            String caminhoFoto = aluno.getCaminhoFoto();
            if (caminhoFoto != null) {
                Bitmap bitmap = BitmapFactory.decodeFile(caminhoFoto);
                Bitmap bitmapReduzido = Bitmap.createScaledBitmap(bitmap, 100, 100, true); //definindo tamanho do bitmap
                campoFoto.setImageBitmap(bitmapReduzido);
                campoFoto.setScaleType(ImageView.ScaleType.FIT_XY);///definindo tamanho dp bitmap
            } else {
                campoFoto.setImageResource(R.drawable.person);//preenche com uma imagem padrão caso não seja tirado uma foto
            }
        return view;
    }
}
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," +
                "caminhoFoto TEXT," +
                "nota REAL);";
        db.execSQL(sql);
    }

    public void onUpgrade(SQLiteDatabase db, int versaoAntiga, int versaoNova) {
        String sql = "";
        switch (versaoAntiga){
            case 1:
                sql = "ALTER TABLE Alunos ADD COLUMN caminhoFoto text;";
                db.execSQL(sql);
        }
    }

    // ----- metodo inserir  -----
    public void insere(Aluno aluno) {
        SQLiteDatabase db = getWritableDatabase();

        ContentValues dados = pegaDadosAluno(aluno);

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

    public List<Aluno> buscaAlunos() {
        SQLiteDatabase db = getReadableDatabase();
        Cursor c = db.rawQuery("SELECT * FROM Alunos;", 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")));
            aluno.setCaminhoFoto(c.getString(c.getColumnIndex("caminhoFoto")));
            alunos.add(aluno);
        }
        c.close();
        return alunos;
    }

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

    // ----- pegando dados do aluno alterado  -----
    @NonNull
    private ContentValues pegaDadosAluno(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());
        dados.put("caminhoFoto", aluno.getCaminhoFoto());
        return dados;
    }

    // ---- metodo alterar ----
    public void altera(Aluno aluno) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues dados = pegaDadosAluno(aluno);

        String [] params = {aluno.getId().toString()};
        db.update("Alunos", dados, "id = ?", params);
    }
}
public class MediaDasNotasDAO extends SQLiteOpenHelper {


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

    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql = "CREATE TABLE MediaDasNotas (id INTEGER PRIMARY KEY," +
                "quantidade INTEGER, " +
                "media REAL);";
        db.execSQL(sql);
    }

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

    }
    // ----- metodo inserir  -----
    public void insereMediaDasNotas(MediaDasNotas mediaDasNotas) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues dadosDaMedia = pegaDadosMediaDasNotas(mediaDasNotas);
        db.insert("MediaDasNotas" , null, dadosDaMedia);
    }

    public List<MediaDasNotas> buscaMediaAlunos() {
        SQLiteDatabase db = getReadableDatabase();
        Cursor cr = db.rawQuery("SELECT * FROM MediaDasNotas;", null);

        List<MediaDasNotas> media = new ArrayList<MediaDasNotas>();
        while (cr.moveToNext()) {
            MediaDasNotas mediaNotas = new MediaDasNotas();
            mediaNotas.setId(cr.getLong(cr.getColumnIndex("id")));
            mediaNotas.setQuantidade(cr.getInt(cr.getColumnIndex("quantidade")));
            mediaNotas.setNota(cr.getDouble(cr.getColumnIndex("media")));

            media.add(mediaNotas);
        }
        cr.close();
        return media;
    }

    // ----- pegando dados do da mediaDasNotas alterado  -----
    @NonNull
    private ContentValues pegaDadosMediaDasNotas(MediaDasNotas mediaDasNotas) {
        ContentValues dadosDaMedia = new ContentValues();

        dadosDaMedia.put("quantidade", mediaDasNotas.getQuantidade());
        dadosDaMedia.put("media", mediaDasNotas.getNota());
        return dadosDaMedia;
    }

}
public class FormularioActivity extends AppCompatActivity {

    public static final int CODIGO_CAMERA = 123;
    private FormularioHelper helper;
    private String caminhoFoto;

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

        this.helper = new FormularioHelper(this);
        Intent intent = getIntent();

        Aluno aluno = (Aluno) intent.getSerializableExtra("Aluno"); //retornando um objeto do tipo serializable

        if(aluno != null){                                          //verificação se já tem aluno existente
            helper.preencheformulario(aluno);
        }

        //  ----  invocando camera  ------------------
        Button botaoCamera = (Button) findViewById(R.id.formulario_foto);
        botaoCamera.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                Intent vaiParaCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

                caminhoFoto = getExternalFilesDir(null) + "/" + System.currentTimeMillis() + ".jpg";
                vaiParaCamera.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(caminhoFoto)));
                startActivityForResult(vaiParaCamera, CODIGO_CAMERA);
            }
        });
        // ---------------------------------------------------------
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == CODIGO_CAMERA){  //VERIFICANDO EVENTO CHAMADO
            if (resultCode == RESULT_OK){
                helper.carregaImagem(caminhoFoto);
            }
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().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);

                // escolhendo se deseja salvar um novo aluno ou alterar um já criado
                if (aluno.getId() != null){
                    dao.altera(aluno);
                    Toast.makeText(FormularioActivity.this, "Aluno " + aluno.getNome() + " atualizado com sucesso!", Toast.LENGTH_SHORT).show();
                } else {
                    dao.insere(aluno);
                    Toast.makeText(FormularioActivity.this, "Aluno " + aluno.getNome() + " Salvo com sucesso!", Toast.LENGTH_SHORT).show();
                }
                dao.close();
                finish();
                break;
        }
        return super.onOptionsItemSelected(item);
    }
}
public class ListaAlunosActivity extends AppCompatActivity {

    //private static final int PERMISSION_RECEIVER_SMS = 123;
    private ListView listaAlunos;



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

        listaAlunos = (ListView) findViewById(R.id.lista_alunos);
        listaAlunos.setEmptyView(findViewById(R.id.list_vazia));

        //mostrar a logo na tela do App
        //getSupportActionBar().setDisplayShowHomeEnabled(true);
        //getSupportActionBar().setIcon(R.mipmap.ic_students);


        // ----  selecionando um aluno da lista p/ editar/atualizar no formulario ----
        listaAlunos.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            @Override
            public void onItemClick(AdapterView<?> lista, View item, int position, long id) {
                Aluno aluno = (Aluno) lista.getItemAtPosition(position);

                Intent intentAlunoParaFormulario = new Intent(ListaAlunosActivity.this, FormularioActivity.class);
                intentAlunoParaFormulario.putExtra("Aluno", aluno);
                startActivity(intentAlunoParaFormulario);
                //Toast.makeText(ListaAlunosActivity.this, "Aluno " + aluno.getNome() + " selecionado", Toast.LENGTH_SHORT).show();
            }
        });
        //---------------------------------------------------------------------------
        // ----- botao novoAluno ----
        Button novoAluno = (Button) findViewById(R.id.novo_aluno);
        novoAluno.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {
                Intent intentVaiParaFormulario = new Intent(ListaAlunosActivity.this, FormularioActivity.class);
                startActivity(intentVaiParaFormulario);
            }
        });
        //-------------------------------------------------------------------------
        // ----   menu no contexto na lista  ----
        registerForContextMenu(listaAlunos);

        //--- codigo abaixo pede permissão de SMS ao abrir a aplicação  ------------
        //if (checkPermission(Manifest.permission.RECEIVE_SMS) != PackageManager.PERMISSION_GRANTED){
        //    requestPermissions(new String[] {Manifest.permission.RECEIVE_SMS},PERMISSION_RECEIVER_SMS );
        //}
        //--------------------------------------------------------------------------
    }
    public void carregaLista(){
        AlunoDAO dao = new AlunoDAO(this);
        List<Aluno> alunos = dao.buscaAlunos();
        dao.close();

        //ArrayAdapter<Aluno> adapter = new ArrayAdapter<Aluno>(this, android.R.layout.activity_list_item, alunos);
        //criando um AlunosAdapter
        AlunosAdapter adapter = new AlunosAdapter(this, alunos);//alem de passar um aluno tem q ser passado um contexto (this) para o adapter.
        listaAlunos.setAdapter(adapter);
    }
    @Override
    protected void onResume() {
        super.onResume();
        carregaLista();
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_lista_alunos, menu);
        return super.onCreateOptionsMenu(menu);
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.menu_enviar_notas:
                //new EnviaAlunosTask(this).execute();
                Intent vaiParaMediaDosAlunos = new Intent(this, MediaDasNotasActivity.class);
                startActivity(vaiParaMediaDosAlunos);
                finish();
                break;
            case R.id.menu_baixar_provas:
                Intent vaiParaProvas = new Intent(this, ProvasActivity.class);
                startActivity(vaiParaProvas);
                break;
            case R.id.menu_mapa:
                Intent vaiParaMapa = new Intent(this, MapaActivity.class);
                startActivity(vaiParaMapa);
                break;
        }
        return super.onOptionsItemSelected(item);
    }
    //  -----  codigo do menu no contexto na lista de alunos   ------
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, final ContextMenu.ContextMenuInfo menuInfo) {
        //-- recuperando o aluno clicado --------------
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
        final Aluno aluno = (Aluno) listaAlunos.getItemAtPosition(info.position);
        // --------------------------------------------

        //-- menu no contexto - ligar --------
        MenuItem ItemLigar = menu.add("Fazer ligação");
        Intent intentLigar = new Intent(Intent.ACTION_VIEW);
        intentLigar.setData(Uri.parse("tel:"+aluno.getTelefone()));
        ItemLigar.setIntent(intentLigar);
        //--------------------------------------------------

        //-- menu no contexto - enviar sms --------
        MenuItem ItemSMS = menu.add("Enviar SMS");
        Intent intentSMS = new Intent(Intent.ACTION_VIEW);
        intentSMS.setData(Uri.parse("sms:"+aluno.getTelefone()));
        ItemSMS.setIntent(intentSMS);
        //--------------------------------------------------

        //-- menu no contexto - google maps --------
        MenuItem ItemMapa = menu.add("Localização");
        Intent intentMapa = new Intent(Intent.ACTION_VIEW);
        intentMapa.setData(Uri.parse("geo:0,0?z=14&q="+aluno.getEndereco()));
        ItemMapa.setIntent(intentMapa);
        //--------------------------------------------------

        //-- menu no contexto - visitar site --------------
        MenuItem itemSite = menu.add("Visitar site");
        Intent intentSite = new Intent(Intent.ACTION_VIEW);

        String site = aluno.getSite();

        if (!site.startsWith("http://")){ //verifica se o site possui o "http://"
            site = "http://" + site;
        } else if (!site.startsWith ("http://www.")){//verifica se o site possui o "http://www."
            site = "http://www." + site;
        }
        intentSite.setData(Uri.parse(site));
        itemSite.setIntent(intentSite);
        //----------------------------------------

        //-- menu item deletar no contexto  -----------
        MenuItem deletar = menu.add("Deletar");
        deletar.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem menuItem) {

                //deletando do aluno
                AlunoDAO dao = new AlunoDAO(ListaAlunosActivity.this);
                dao.deleta(aluno);
                dao.close();

                //mostrando mensagem e atualizando a lista
                Toast.makeText(ListaAlunosActivity.this, "Aluno " + aluno.getNome() + " deletado com sucesso!", Toast.LENGTH_SHORT).show();
                carregaLista();
                return false;
            }
        });
        //-----------------------------------------------------
        //@Override
        //public void onRequestPermissionResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantTesults) {
            //super.onRequestPermissionResult(requestCode, permissions, grantResults);

           // if (requestCode == 123) {
                // faz a ligacao
          //  }
        //}
    }
}
public class MediaDasNotasActivity extends AppCompatActivity {

    private ListView listaDasMediaAlunos;

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

        listaDasMediaAlunos = (ListView) findViewById(R.id.lista_mediaDasNotas);
        //listaDasMediaAlunos.setEmptyView(findViewById(R.id.list_media_vazia));

        //Intent intent = getIntent();

        //new EnviaAlunosTask(this).execute();
    }

    public void carregaMediaAlunos(){
        MediaDasNotasDAO daoMedia = new MediaDasNotasDAO(this);
        List<MediaDasNotas> media = daoMedia.buscaMediaAlunos();
        daoMedia.close();

        //ArrayAdapter<Aluno> adapter = new ArrayAdapter<Aluno>(this, android.R.layout.activity_list_item, alunos);
        //criando um AlunosAdapter
        MediaDasNotasAdapter adapterMedia = new MediaDasNotasAdapter(this, media);//alem de passar um aluno tem q ser passado um contexto (this) para o adapter.
        listaDasMediaAlunos.setAdapter(adapterMedia);
    }
    @Override
    protected void onResume() {
        super.onResume();
        carregaMediaAlunos();
    }
}

a resposta que o json retorna é:

Exemplo:

{"media":"4","quantidade":2}

Então, as variaveis da minha classe deveria ser:

private String media;
private int quantidade;

ou pode ser conforme eu fiz, no codigo postado acima?

consegui mostrar o toast na telaque queria "MediaDasNotasActivity ".

coloquei as a tabela "MediaDasNotas" dentro da classe "AlunosDAO".

não aparece mais o erro: "SQLiteException: no such table"

mas, como listo as repostas na tela?

public class AlunoDAO extends SQLiteOpenHelper {

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        //tabela Alunos
        String sql = "CREATE TABLE Alunos (id INTEGER PRIMARY KEY," +
                "nome TEXT NOT NULL, " +
                "endereco TEXT," +
                "telefone TEXT," +
                "site TEXT," +
                "caminhoFoto TEXT," +
                "nota REAL);";
        //tabela MediaDasNotas
        String sqlMedia = "CREATE TABLE MediaDasNotas (id INTEGER PRIMARY KEY," +
                "media TEXT, " +
                "quantidade INTEGER);";

        db.execSQL(sqlMedia);
        db.execSQL(sql);
    }

    public void onUpgrade(SQLiteDatabase db, int versaoAntiga, int versaoNova) {
        String sql = "";
        switch (versaoAntiga) {
            case 1:
                sql = "ALTER TABLE Alunos ADD COLUMN caminhoFoto text;";
                db.execSQL(sql);
        }
    }

    // ----- metodo inserir tabela Alunos  -----
    public void insere(Aluno aluno) {
        SQLiteDatabase db = getWritableDatabase();

        ContentValues dados = pegaDadosAluno(aluno);

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

    public List<Aluno> buscaAlunos() {
        SQLiteDatabase db = getReadableDatabase();
        Cursor c = db.rawQuery("SELECT * FROM Alunos;", 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")));
            aluno.setCaminhoFoto(c.getString(c.getColumnIndex("caminhoFoto")));
            alunos.add(aluno);
        }
        c.close();
        return alunos;
    }

    // ----- metodo inserir  tabela MediaDasNotas-----
    public void insereMediaDasNotas(MediaDasNotas mediaDasNotas) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues dadosDaMedia = pegaDadosMediaDasNotas(mediaDasNotas);
        db.insert("MediaDasNotas", null, dadosDaMedia);
    }

    public List<MediaDasNotas> buscaMediaAlunos() {
        SQLiteDatabase db = getReadableDatabase();
        Cursor cr = db.rawQuery("SELECT * FROM MediaDasNotas;", null);

        List<MediaDasNotas> media = new ArrayList<MediaDasNotas>();
        while (cr.moveToNext()) {
            MediaDasNotas mediaNotas = new MediaDasNotas();
            mediaNotas.setId(cr.getLong(cr.getColumnIndex("id")));
            mediaNotas.setMedia(cr.getString(cr.getColumnIndex("media")));
            mediaNotas.setQuantidade(cr.getInt(cr.getColumnIndex("quantidade")));

            media.add(mediaNotas);
        }
        cr.close();
        return media;
    }


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

    // ----- pegando dados do aluno alterado  -----
    @NonNull
    private ContentValues pegaDadosAluno(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());
        dados.put("caminhoFoto", aluno.getCaminhoFoto());
        return dados;
    }

    // ----- pegando dados do da mediaDasNotas alterado  -----
    @NonNull
    private ContentValues pegaDadosMediaDasNotas(MediaDasNotas mediaDasNotas) {
        ContentValues dadosDaMedia = new ContentValues();
        dadosDaMedia.put("media", mediaDasNotas.getMedia());
        dadosDaMedia.put("quantidade", mediaDasNotas.getQuantidade());
        return dadosDaMedia;
    }

    // ---- metodo alterar ----
    public void altera(Aluno aluno) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues dados = pegaDadosAluno(aluno);

        String[] params = {aluno.getId().toString()};
        db.update("Alunos", dados, "id = ?", params);
    }
}

Agora, como armazenar os valores lidos, no modelo e depois, pedir para o DAO salvar?

protected void onPostExecute(String resposta) {
        dialog.dismiss();
        try {
            // aqui vc pode usar a resposta da requisição
            String jsonDeResposta = resposta;

            JSONObject json = new JSONObject(jsonDeResposta);
            String media = json.getString("media");
            int quantidade = json.getInt("quantidade");
            Log.i("LOG", "Media : " + media);
            Log.i("LOG", "Quantidade : " + quantidade);
            super.onPostExecute(jsonDeResposta);
        } catch (JSONException e) {
            e.printStackTrace();
        }

como seria esse insert? para poder salvar no banco ?

solução!

consegui!! agora está inserindo no banco e mostrado na tela.

@Override
    protected void onPostExecute(String resposta) {
        dialog.dismiss();
        try {
            String jsonDeResposta = resposta;
            JSONObject json = new JSONObject(jsonDeResposta);

            String media = json.getString("media");
            int quantidade = json.getInt("quantidade");

            MediaDasNotas notas = new MediaDasNotas();

            notas.setMedia(media);
            notas.setQuantidade(quantidade);

            AlunoDAO dao = new AlunoDAO(context);

            dao.insereMediaDasNotas(notas);

            //Log.i("LOG", "Media : " + media);
            //Log.i("LOG", "Quantidade : " + quantidade);

            super.onPostExecute(jsonDeResposta);
        } catch (JSONException e) {
            e.printStackTrace();
    }

Agora para mostrar os dados na lista, na primeira vez q clico no botão, eu tenho que clicar 2 vezes, para que a requisição do json 2 mostre na lista. isso é normal?

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