problems with trying to get the order id

Asked

Viewed 43 times

0

well I am trying to register an order, however I have two tables, order and ordering, and a screen where I fill all the information and click to complete.

First the application makes an Insert in the requested table, then makes another in the requested table_product, but to make the Insert in the requested table_product the application must pick the order id, so I made a select searching for that id before performing the insertion, however I am not able to recover this id, let’s go to the codes:

btnConclude:

Button confirma = (Button) findViewById(R.id.btnConfirmar);
    confirma.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            final BancoController crud = new BancoController(getBaseContext());

            EditText data = (EditText) findViewById(R.id.edtData);
            EditText emissao = (EditText) findViewById(R.id.edtEmissao);
            EditText obs = (EditText) findViewById(R.id.edtObs);

            String dataString = data.getText().toString();
            String emissaoString = emissao.getText().toString();
            String obsString = obs.getText().toString();
            String resultadoPe;
            String resultadoPp;

            Spinner spClientes = (Spinner) findViewById(R.id.spCliente);
            Spinner spCarteira = (Spinner) findViewById(R.id.spCarteira);
            Spinner spPagamentos = (Spinner) findViewById(R.id.spPagamento);

            SQLiteCursor dadosClientes = (SQLiteCursor) spClientes.getAdapter().getItem(
                    spClientes.getSelectedItemPosition());

            SQLiteCursor dadosCarteira = (SQLiteCursor) spCarteira.getAdapter().getItem(
                    spCarteira.getSelectedItemPosition());

            SQLiteCursor dadosPagamentos = (SQLiteCursor) spPagamentos.getAdapter().getItem(
                    spPagamentos.getSelectedItemPosition());

            String idCliente = String.valueOf(dadosClientes.getInt(0));
            String idCarteira = String.valueOf(dadosCarteira.getInt(0));
            String idPagamento = String.valueOf(dadosPagamentos.getInt(0));

            crud.op = 2;

            resultadoPe = crud.insereDados(null, null, null, null, null, null, null, null,
                    null, null, null, null, idCliente, idPagamento, idCarteira, dataString,
                    emissaoString, obsString, null, null, null, null, null);

            Toast.makeText(getApplication(), resultadoPe, Toast.LENGTH_LONG).show();

            final Cursor cursor = crud.pegarIdPedido();
            pedId = cursor.getString(cursor.getColumnIndexOrThrow(CriaBanco.getPedId()));
            ArrayList<Produtos> produtos = produtosAdapter.getProdutos();
            int linhas = produtos.size();

            for (int i = 0; i < linhas; i++ ){

                crud.op = 3;

                Produtos linha = produtos.get(i);
                String id = linha.getId();
                String qtd = linha.getQuantidade();
                String preco = linha.getPreco();

                int ipreco = Integer.parseInt(preco);
                int iqtd = Integer.parseInt(qtd);
                int itotal = ipreco / iqtd;

                String stotal = String.valueOf(itotal);

                resultadoPp = crud.insereDados(null, null, null, null, null, null, null, null,
                        null, null, null, null, null, null, null, null, null, null, pedId,
                        id, qtd, preco, stotal);

                Toast.makeText(getApplication(), resultadoPp, Toast.LENGTH_LONG).show();
            }
        }
    });

Pegidpedido:

public  Cursor pegarIdPedido(){
    Cursor cursor;

    db = banco.getReadableDatabase();
    cursor = db.rawQuery("SELECT MAX(" + banco.getPedId() + ") AS " + banco.getPedTabela() +
            " FROM " + banco.getPedTabela(), null);

    if(cursor != null){
        cursor.moveToFirst();
    }
    db.close();
    return cursor;
}

it is on this line that this the problem:

pedId = cursor.getString(cursor.getColumnIndexOrThrow(CriaBanco.getPedId()));

Can someone help me?

Note: When I run the app and arrive at this snippet, no error occurs on Android Monitor, but the application is forced to close.

thanks in advance!

---EDIT---

insert data:

public String insereDados
        (String nome, String apelido, String cpf, String rg, String endereco, String bairro,
         String municipio, String uf, String cep, String email, String fone, String cla,
         String par, String car, String cpag, String data, String emissao, String obs, String ped,
         String pro, String quantidade, String unitario, String item /**String lpPcodigo,
         String lpDescri, String lpQtd, String lpPreco*/){

    long resultadoC = -1;
    long resultadoPe = -1;
    long resultadoPr = -1;
    //long resultadoLp = -1;
    db = banco.getWritableDatabase();


    switch (op){
        case 1://Insere cliente:
            ContentValues cvc;
            cvc = new ContentValues();

            cvc.put(CriaBanco.getParNome(), nome);
            cvc.put(CriaBanco.getParApelido(), apelido);
            cvc.put(CriaBanco.getParCpf(), cpf);
            cvc.put(CriaBanco.getParRg(), rg);
            cvc.put(CriaBanco.getParEndereco(), endereco);
            cvc.put(CriaBanco.getParBairro(), bairro);
            cvc.put(CriaBanco.getParMunicipio(), municipio);
            cvc.put(CriaBanco.getParUf(), uf);
            cvc.put(CriaBanco.getParCep(), cep);
            cvc.put(CriaBanco.getParEmail(), email);
            cvc.put(CriaBanco.getParFone(), fone);

            resultadoC = db.insert(CriaBanco.getParTabela(), null, cvc);
            break;

        case 2://Insere Pedido
            ContentValues cvpe;
            cvpe = new ContentValues();

            cvpe.put(CriaBanco.getClaId(), cla);
            cvpe.put(CriaBanco.getPparId(), par);
            cvpe.put(CriaBanco.getCarId(), car);
            cvpe.put(CriaBanco.getCpagId(), cpag);
            cvpe.put(CriaBanco.getPedData(), data);
            cvpe.put(CriaBanco.getPedEmissao(), emissao);
            cvpe.put(CriaBanco.getPedObs(), obs);

            resultadoPe = db.insert(CriaBanco.getPedTabela(), null, cvpe);
            break;

        case 3: // Insere Pedido Produto

            ContentValues cvpr;
            cvpr = new ContentValues();

            cvpr.put(CriaBanco.getPppedId(), ped);
            cvpr.put(CriaBanco.getPpproId(), pro);
            cvpr.put(CriaBanco.getPproQnt(), quantidade);
            cvpr.put(CriaBanco.getPproUnit(), unitario);
            cvpr.put(CriaBanco.getPproItem(), item);

            resultadoPr = db.insert(CriaBanco.getPprodTabela(), null, cvpr);
            break;

    }
    db.close();

    if (resultadoC != -1){
        return "Cliente inserido com sucesso!";
    }else if(resultadoPe != -1 || resultadoPr != -1){
        return "Pedido realizado com sucesso!";
    }/**else if(resultadoLp != -1) {
        return "Produto adicionado a lista com sucesso!";
    }*/else{
        return "Erro ao inserir registro (cliente/pedido)!";
    }
}
  • Post the method you use to make the Insert of the request.

  • updated the post

1 answer

0


I already solved this problem

just change this:

cursor = db.rawQuery("SELECT MAX(" + banco.getPedId() + ") AS " + banco.getPedTabela() +
        " FROM " + banco.getPedTabela(), null);

for this reason:

cursor = db.rawQuery("SELECT MAX(_id) AS _id FROM PEDIDO", null);

thank you for your attention.

  • 1

    The usual way to get the id of a record at the time it is inserted is to save the value returned by db.insert().

Browser other questions tagged

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