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

Enviando e recebendo dados entre Activitys

Olá, estou tendo um problema no envio das informações, que sai de da Activity 1, passa pela Activity 2 e é editado/cadastrado na Activity 3 e na configuração do delete através do menu, explico:

Activity 1: Possui uma lista com cartão de credito já cadastrado e um botão para adicionar um novo cartão.

Activity 2: Possui os campos de TextView de Numero do cartão e data de vencimento. E um menu na barra superior com a opção de Editar ou Deletar.

Activity 3:Possui os campos para o cadastro e edição do cartão de credito (Numero do cartão, data de vencimento e cvv) e um botão de salvar.

Obs: Estou me baseando nas aula 5 do modulo I e me inspirando no app do Uber na parte de Pagamentos que possui essas telas.

Segue o código das activitys atualmente;

Activity 1

public class UserPaymentsActivity extends AppCompatActivity {

    private ListView listCreditCards;

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

        listCreditCards = (ListView) findViewById(R.id.ListViewCreditCard);

        listCreditCards.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                Credit_Card credit_Card = (Credit_Card) listCreditCards.getItemAtPosition(position);
                Intent intentGoEditDeleteCreditCard = new Intent(UserPaymentsActivity.this, EditDeleteCreditCardActivity.class);
                intentGoEditDeleteCreditCard.putExtra("credit_card", credit_Card);
                startActivity(intentGoEditDeleteCreditCard);
            }
        });

        ImageButton buttonImgBack = (ImageButton) findViewById(R.id.imageButtonBack);
        buttonImgBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intentBack = new Intent(UserPaymentsActivity.this, MainActivity.class);
                startActivity(intentBack);
            }
        });

        Button buttonAddCard = (Button) findViewById(R.id.buttonAddCard);
        buttonAddCard.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intentAddCard = new Intent(UserPaymentsActivity.this, AddCreditCardActivity.class);
                startActivity(intentAddCard);
            }
        });

        Button buttonOrders = (Button) findViewById(R.id.buttonOrders);
        buttonOrders.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intentOrders = new Intent(UserPaymentsActivity.this, OrdersActivity.class);
                startActivity(intentOrders);
            }
        });
    }

    private void chargeList() {
        Credit_CardDAO dao = new Credit_CardDAO(this);
        List<Credit_Card> credit_Cards = dao.searchCreditCards();
        dao.close();

        ArrayAdapter<Credit_Card> adapter = new ArrayAdapter<Credit_Card>(this, android.R.layout.simple_list_item_1, credit_Cards);
        listCreditCards.setAdapter(adapter);
    }

    @Override
    protected void onResume() {
        super.onResume();
        chargeList();
    }
}

Activity 2

public class EditDeleteCreditCardActivity extends AppCompatActivity {

    private Credit_CardHelper helper;

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

        helper = new Credit_CardHelper();

        ImageButton buttonImgBack = (ImageButton) findViewById(R.id.imageButtonBack);
        buttonImgBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intentBack = new Intent(EditDeleteCreditCardActivity.this, UserPaymentsActivity.class);
                startActivity(intentBack);
            }
        });

        Intent intent = getIntent();
        Credit_Card credit_Card = (Credit_Card) intent.getSerializableExtra("credit_card");
        if (credit_Card != null){

            helper.fillCreditCard(credit_Card);
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_crud, menu);


        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        helper = new Credit_CardHelper(this);

        switch (item.getItemId()){
            case R.id.crud_edit:
                Intent intentEdit = new Intent(EditDeleteCreditCardActivity.this, AddCreditCardActivity.class);
                startActivity(intentEdit);
                finish();
                break;

            case R.id.crud_delete:
               Credit_Card credit_card = helper.takeCreditCard();
//                Credit_CardDAO dao = new Credit_CardDAO(this);
//                dao.delete(credit_card);
//                dao.close();
//
                Intent intentDelete = new Intent(EditDeleteCreditCardActivity.this, UserPaymentsActivity.class);
                startActivity(intentDelete);
                Toast.makeText(EditDeleteCreditCardActivity.this, "Cartão de credito" + credit_card.getId_Credit_Card() + "deletado", Toast.LENGTH_SHORT).show();
                finish();
                break;
        }
        return super.onOptionsItemSelected(item);
    }
}

Activity 3

public class AddCreditCardActivity extends AppCompatActivity {

    private Credit_CardHelper helper;

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

        helper = new Credit_CardHelper(this);

        ImageButton buttonImgBack = (ImageButton) findViewById(R.id.imageButtonBack);
        buttonImgBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intentBack = new Intent(AddCreditCardActivity.this, EditDeleteCreditCardActivity.class);
                startActivity(intentBack);
            }
        });

        Button buttonSalve = (Button) findViewById(R.id.buttonSave);
        buttonSalve.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Credit_Card credit_card = helper.takeCreditCard();

                Credit_CardDAO dao = new Credit_CardDAO(AddCreditCardActivity.this);
                if(credit_card.getId_Credit_Card() != null){
                    dao.edit(credit_card);
                }else {
                    dao.infix(credit_card);
                }
                dao.close();

                Intent intentSalve = new Intent(AddCreditCardActivity.this, UserPaymentsActivity.class);
                startActivity(intentSalve);
                Toast.makeText(AddCreditCardActivity.this, "Cartão de credito salvo", Toast.LENGTH_SHORT).show();
            }
        });

        Intent intent = getIntent();
        Credit_Card credit_Card = (Credit_Card) intent.getSerializableExtra("credit_card");
        if (credit_Card != null){

            helper.fillCreditCard(credit_Card);
        }
    }
}

Caso necessite de alguma outra informação só falar.

5 respostas
solução!

Fala ai Osmar, tudo bem ?

Cara vi que você está passando o cartão de crédito da primeira para a segunda.

O problema é que quando você vai para a terceira tela você não está passando novamente, na verdade em nenhum ponto você armazena esse tipo de informação.

Se você perceber é nesse ponto que seria necessário disponibilizar o dado para ser passado de uma Activity para outra :

case R.id.crud_edit:
                Intent intentEdit = new Intent(EditDeleteCreditCardActivity.this, AddCreditCardActivity.class);
                startActivity(intentEdit);
                finish();
                break;

Você precisa repassar o cartão para lá.

Espero ter deixado um pouco mais claro.

O que precisar estou a disposição

Abraços

Entendi, é que o edit do menu não tinha implementado. Primeiro tentei com o delete, pq fiz o edit como na aula 5 (quando clica em cima do nome do aluno na lista ele manda pra tela de cadastro para assim editar) e funcionou igual. Mas adicionei essa activiti que esta no meio dos dois e retirei o Menu Context do delete da primeira e adicionei na segunda junto com o edit, mas agora em menu "na barra".

Quando tentei o edit ele deu problema no helper e acredito que seja nele o problema, eu consegui passar os dados da activity 1 para a 2, mas ele acaba fechando o app. Fazendo o debug ele mostra que passa o id do cartão mas logo enseguida da exceção na seguinte linha:

helper.fillCreditCard(credit_Card);

Fora que preciso alem disso preciso colocar o numero e a data de vencimento nos TextView, sendo que no helper esta instanciado para EditText como mostrado na aula. Segue o Helper:

public class Credit_CardHelper {

    private final EditText nCreditCard;
    private final EditText dueDate;
    private final EditText cVV;

    private Credit_Card credit_card;

    public Credit_CardHelper(AddCreditCardActivity activity){

        nCreditCard = (EditText) activity.findViewById(R.id.editTextNCardCredit);
        dueDate =  (EditText) activity.findViewById(R.id.editTextDueDate);
        cVV = (EditText) activity.findViewById(R.id.editTextCVV);
        credit_card = new Credit_Card();
    }

    public Credit_Card takeCreditCard() {
        credit_card.setN_Credit_Card(String.valueOf(nCreditCard.getText().toString()));
        credit_card.setDue_Date(String.valueOf(dueDate.getText().toString()));
        credit_card.setCvv(String.valueOf(cVV.getText().toString()));
        return credit_card;
    }

    public void fillCreditCard (Credit_Card credit_card){
        nCreditCard.setText(credit_card.getN_Credit_Card());
        dueDate.setText(credit_card.getDue_Date());
        cVV.setText(credit_card.getCvv());
        this.credit_card = credit_card;
    }
}

Voce esta fazendo em alguns lugares e outros não

                Credit_Card credit_Card = (Credit_Card) listCreditCards.getItemAtPosition(position);
                Intent intentGoEditDeleteCreditCard = new Intent(UserPaymentsActivity.this, EditDeleteCreditCardActivity.class);
                intentGoEditDeleteCreditCard.putExtra("credit_card", credit_Card);
                startActivity(intentGoEditDeleteCreditCard);

Uma outra coisa é sua forma de voltar. Para voltar de uma tela para outra use:

finish();

Orientando a criação de uma nova activity voce esta empilhando mais uma.

Valeu pelas dicas pessoal. Consegui resolver o problema do edit e delete. Outro problema que eu to tendo é em relação ao helper que deixou setado as variáveis em EditText, sendo que no método EditDeleteCreditCardActivity gostaria que colocar as informações em TextView. Conseguem me ajudar nessa ?

Osmar, abre um novo tópico, só para gente manter bem dividido e para a galera saber que esse seu problema já foi resolvido.

Assim que abrir pode deixar que te ajudarei.

Abraços

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