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?
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?
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 ?
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?