0
Hi, I’m having a problem with a little study project. I have 2 activitys, First Product and Second Product.
The first instance of the object Product 1 saves it in the Sqlite bank, when calling the second instance it passes the id of the product that just saved through the put.
In the second Activity, Product2 it retrieves the bank ID and saves a second product.
The problem is that it saves the first product and saves the second but if we look inside the bank the second was only with the id, the rest of the information that is important is not saved.
I have already checked the references inside the Layout_second product.xml, I have already checked the Product object that received the information from the XML screen. It’s all right.
Follow image of Sqlite Expert:
Productive
package produtos.compara.souza.hugo.comparaprodutos.DAO;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import java.util.ArrayList;
import java.util.List;
import produtos.compara.souza.hugo.comparaprodutos.Model.Produto;
/**
* Created by Hugo on 24/06/2015.
*/
public class ProdutoDAO {
//TODO declarando objeto
//Objeto databaseHelper da Classe do mesmo nome que auxilia no gerenciamento do banco
private DatabaseHelper databaseHelper;
// Banco de dados
private SQLiteDatabase comparedatabase;
//Constructor que recebe o contexto e instancia o DatabaseHelper()
public ProdutoDAO(Context ctx){
databaseHelper = new DatabaseHelper(ctx);
}
//TODO: sad
// M�todo que verifica se o banco esta vazio, caso esteja vazio ele abre o banco.
private SQLiteDatabase getDatabase(){
if (comparedatabase == null){
comparedatabase = databaseHelper.getWritableDatabase();
}
return comparedatabase;
}
//Recupera de um cursor dados que vieram de um banco por exemplo para Incstanciar um Produto que
//podera ser trabalhado como Model (Objeto VO, POJO por exemplo)
private Produto criarProduto(Cursor cursor){
Produto produto = new Produto(
cursor.getInt(cursor.getColumnIndex(DatabaseHelper._Produto.ID_PROD)),
cursor.getString(cursor.getColumnIndex(DatabaseHelper._Produto.UNIDADE)),
cursor.getString(cursor.getColumnIndex(DatabaseHelper._Produto.DESCRICAO)),
cursor.getString(cursor.getColumnIndex(DatabaseHelper._Produto.QUANTIDADE)),
cursor.getString(cursor.getColumnIndex(DatabaseHelper._Produto.PRECO))
);
return produto;
}
/* M�todo de insert dentro do banco de dados. Ele recebe como parametro um objeto do
tipo produto que veio da aplica��o (Activity por exemplo) aonde esta trabalhando com o objeto DAO
*/
public boolean salvarProduto(Produto produto) {
//ContentValue que sera usado para passar como parametro nos m�todos update ou insert do banco de dados
ContentValues ctv = new ContentValues();
ctv.put(DatabaseHelper._Produto.UNIDADE.toString(), produto.getUnidade().toString());
ctv.put(DatabaseHelper._Produto.DESCRICAO, produto.getDesricao());
ctv.put(DatabaseHelper._Produto.QUANTIDADE.toString(), produto.getQuantidade());
ctv.put(DatabaseHelper._Produto.PRECO.toString(), produto.getPreco());
//Caso o produto que foi passado como parametro para o metodo salvarProduto() seja diferente de NULL
// ou seja, existe um id, ou seja, ele esta tentando atualizar algo que ja existe ele chama o metodo .update()
if(produto.getId_prod() != null){
return getDatabase().update(DatabaseHelper._Produto.TABELA, ctv, "id_prod=?", new String[]{produto.getId_prod().toString()})>0;
}
// Caso contario , se o id for null ele insere os dados
return getDatabase().insert(DatabaseHelper._Produto.TABELA, null, ctv)>0;
}
public boolean removerProduto(Produto produto){
return getDatabase().delete(DatabaseHelper._Produto.TABELA, "id_prod", new String[]{produto.getId_prod().toString()})>0;
}
public Produto buscarProdutobyID(Integer id){
Cursor cursor = getDatabase().query(DatabaseHelper._Produto.TABELA, DatabaseHelper._Produto.COLUNAS, "id_prod=?", new String[]{id.toString()}, null, null, null);
if (cursor.moveToFirst()){
Produto produtomodel = criarProduto(cursor);
cursor.close();
return produtomodel;
}
return null;
}
public Integer ultimoProduto(){
Cursor cursor = getDatabase().query(DatabaseHelper._Produto.TABELA, DatabaseHelper._Produto.COLUNAS, null, null, null, null, null);
if (cursor.moveToLast()){
Produto produtomodel = criarProduto(cursor);
cursor.close();
return produtomodel.getId_prod();
}
return null;
}
//M�todo que vai retornar uma LISTA de produtos
public List<Produto> produtoAll(){
// Sempre quando tivermos algo como uma lista ou um resultado fatalmente precisaremos de
// um CURSOR para percorrer os resultados e montar ou apresentar esse reultado depois
// O cursor precisa de ser instanciado com um banco de dados e algum m�todo do banco de dados como uma query,
// nesse caso foi criado um outro m�todo getDatabase() que esta acima verifica se o banco n�o esta
// vazio, caso esteja o banco � aberto com o m�todo getWritableDatabase() e retorne um objeto do tipo SQliteDatabase
// a Query precisa dos parametros para fazer a consulta no banco que s�o:
/*/ query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having,
String orderBy)*/
Cursor cursor = getDatabase().query(DatabaseHelper._Produto.TABELA, DatabaseHelper._Produto.COLUNAS,
null, null, null, null, null);
//A lista de produtos que sera de fato retornada pelo m�todo produtoALL()
//Essa lista 'produtos' logo a frente vai receber pelo m�todo .add cada produto que existe no cursosr quando passar
//pelo While caso seja possivel (se existir) mover para o proximo item do cursos.
List<Produto> produtos = new ArrayList<Produto>();
//While que passa por cada item do cursor. Enquanto existir itens para serem movidor ele move para o pr�ximo com o
//m�todo moveToNext() que � um m�todo da Classe Cursor como podemos ver logo abaixo.
while (cursor.moveToNext()){
//Cada passada pelo cursor dentro do While ele cria um novo objeto produto e insere com o .add dentro da lista
//de produtos
Produto produto = criarProduto(cursor);
produtos.add(produto);
}
//Retorna a lista de produtos
return produtos;
}
public void fecharDB(){
databaseHelper.close();
comparedatabase.close();
}
}
First Product Activity
package produtos.compara.souza.hugo.comparaprodutos.Activity;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import produtos.compara.souza.hugo.comparaprodutos.DAO.ProdutoDAO;
import produtos.compara.souza.hugo.comparaprodutos.Model.Produto;
import produtos.compara.souza.hugo.comparaprodutos.R;
import produtos.compara.souza.hugo.comparaprodutos.util.SystemUiHider;
/**
* An example full-screen activity that shows and hides the system UI (i.e.
* status bar and navigation/system bar) with user interaction.
*
* @see SystemUiHider
*/
public class PrimeiroProduto extends Activity {
private EditText edt_produto;
private EditText edt_preco;
private EditText edt_unidade;
private EditText edt_quantidade;
private Button btn_proximo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_primeiro_produto);
edt_produto = (EditText) findViewById(R.id.edt_produto1);
edt_preco = (EditText) findViewById(R.id.edt_preco1);
edt_unidade = (EditText) findViewById(R.id.edt_unidade1);
edt_quantidade = (EditText) findViewById(R.id.edt_quantidade1);
btn_proximo = (Button) findViewById(R.id.btn_Proximo);
btn_proximo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final Produto mproduto = new Produto();
mproduto.setDesricao(edt_produto.getText().toString());
mproduto.setPreco(edt_preco.getText().toString());
mproduto.setUnidade(edt_unidade.getText().toString());
mproduto.setQuantidade(edt_quantidade.getText().toString());
final ProdutoDAO pDAO = new ProdutoDAO(getBaseContext());
if (pDAO.salvarProduto(mproduto)) {
Log.i("banco", "Produto salvo", null);
AlertDialog.Builder msg = new AlertDialog.Builder(PrimeiroProduto.this);
msg.setMessage("Ir para o proximo Produto");
msg.setPositiveButton("Sim", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
startActivity(new Intent(getBaseContext(), SegundoProduto.class).putExtra("id", pDAO.ultimoProduto()));
}
});
msg.setNegativeButton("Não", null);
msg.show();
}
}
});
// Set up an instance of SystemUiHider to control the system UI for
// this activity.
}
}
Second Avtivity Product
package produtos.compara.souza.hugo.comparaprodutos.Activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import produtos.compara.souza.hugo.comparaprodutos.DAO.ProdutoDAO;
import produtos.compara.souza.hugo.comparaprodutos.Model.Produto;
import produtos.compara.souza.hugo.comparaprodutos.R;
import produtos.compara.souza.hugo.comparaprodutos.util.SystemUiHider;
/**
* An example full-screen activity that shows and hides the system UI (i.e.
* status bar and navigation/system bar) with user interaction.
*
* @see SystemUiHider
*/
public class SegundoProduto extends Activity {
private EditText edt_produto2;
private EditText edt_preco2;
private EditText edt_unidade2;
private EditText edt_quantidade2;
private Button btn_compare;
private Produto mProduto2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_segundo_produto);
edt_produto2 = (EditText) findViewById(R.id.edt_produto2);
edt_preco2 = (EditText) findViewById(R.id.edt_preco2);
edt_unidade2 = (EditText) findViewById(R.id.edt_unidade2);
edt_quantidade2 = (EditText) findViewById(R.id.edt_quantidade2);
btn_compare = (Button) findViewById(R.id.btn_Compare);
final Intent intent = getIntent();
final Integer ID = intent.getIntExtra("id", 0);
final ProdutoDAO pDAO = new ProdutoDAO(getBaseContext());
final Produto mProduto1 = pDAO.buscarProdutobyID(ID);
mProduto2 = new Produto();
mProduto2.setDesricao(edt_produto2.getText().toString());
mProduto2.setPreco(edt_preco2.getText().toString());
mProduto2.setUnidade(edt_unidade2.getText().toString());
mProduto2.setQuantidade(edt_quantidade2.getText().toString());
pDAO.salvarProduto(mProduto2);
btn_compare.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
int[] arrayIDs = new int[2];
arrayIDs[0] = mProduto1.getId_prod();
arrayIDs[1] = pDAO.ultimoProduto();
startActivity(new Intent(getBaseContext(), Compare_Activity.class).putExtra("ids", arrayIDs));
} catch (Exception e) {
Log.e("meuapp", "Erro do Try Catch: " + e.getMessage().toString());
}
}
});
}
}
Thank you very much, it worked.
– Hugo
Ok. When you accept an answer, take the opportunity to vote +1 on it.
– Piovezan
I tried but don’t let, it talks I have to have I don’t know how many points or something like that
– Hugo