Object Product Saved on the first screen but not on the second

Asked

Viewed 80 times

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: inserir a descrição da imagem aqui

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

        }
    });





    }
}

1 answer

0


Your code is holding in the object mProduto2 the content of the fields EditText empty and saving these values in the bank before you get to enter them.

To correct this, change this section...

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

    }
});

...for this:

mProduto2 = new Produto();

btn_compare.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        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);

        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.

  • Ok. When you accept an answer, take the opportunity to vote +1 on it.

  • I tried but don’t let, it talks I have to have I don’t know how many points or something like that

Browser other questions tagged

You are not signed in. Login or sign up in order to post.