Nicoll Mejia
Nicoll Mejia

Reputation: 79

Android Intent fail

I am making an app with a small form, where clicking will change the activity

In the second activity you should see the data entered and when you click on the button return the same data, so that they are edited

The app works well in sending the data to the second activity

but when returning to edit the data, adding the intent to return the app does not work

Main Activity

package com.niccode.desarrollounaapp;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import androidx.appcompat.app.AppCompatActivity;

import com.google.android.material.datepicker.MaterialDatePicker;
import com.google.android.material.datepicker.MaterialPickerOnPositiveButtonClickListener;


public class MainActivity extends AppCompatActivity {


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

        Button Siguiente = (Button) findViewById(R.id.Siguiente);

        final EditText etName         = (EditText) findViewById(R.id.tiNombreCompleto);
        final EditText etFecha       = (EditText)findViewById(R.id.Calendario);
        final EditText etTelefono    = (EditText)findViewById(R.id.tiTelefono);
        final EditText etEmail       = (EditText)findViewById(R.id.tiEmail);
        final EditText etDescripcion = (EditText) findViewById(R.id.tiDescripcionContacto);


        MaterialDatePicker.Builder<Long> builder = MaterialDatePicker.Builder.datePicker();
        builder.setTitleText(getResources().getString(R.string.date1));

        final MaterialDatePicker<Long> materialDatePicker = builder.build();

        etFecha.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                materialDatePicker.show(getSupportFragmentManager(), "DATE_PICKER");

            }
        });

        materialDatePicker.addOnPositiveButtonClickListener(new MaterialPickerOnPositiveButtonClickListener() {
            @Override
            public void onPositiveButtonClick(Object selection) {
                etFecha.setText(materialDatePicker.getHeaderText());
            }
        });


        Siguiente.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent(MainActivity.this, Confirmar_Datos.class);

                intent.putExtra(getResources().getString(R.string.pname), etName.getText().toString());
                intent.putExtra(getResources().getString(R.string.pdate),  etFecha.getText().toString());
                intent.putExtra(getResources().getString(R.string.ptelefono), etTelefono.getText().toString());
                intent.putExtra(getResources().getString(R.string.pemail),  etEmail.getText().toString());
                intent.putExtra(getResources().getString(R.string.pDescripcion),  etDescripcion.getText().toString());

                startActivity(intent);
                finish();


            }
        });

        Bundle para_back = getIntent().getExtras();

        assert para_back != null;
        final String nombre_return      = para_back.getString(getResources().getString(R.string.rtname));
        final String fecha_return       = para_back.getString(getResources().getString(R.string.rtdate));
        final String telefono_return    = para_back.getString(getResources().getString(R.string.rtelefono));
        final String email_return       = para_back.getString(getResources().getString(R.string.rtemail));
        final String descripcion_return = para_back.getString(getResources().getString(R.string.rtDescripcion));

        etName.setText(nombre_return);
        etFecha.setText(fecha_return);
        etTelefono.setText(telefono_return);
        etEmail.setText(email_return);
        etDescripcion.setText(descripcion_return);
    }
}

Second Layout

package com.niccode.desarrollounaapp;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class Confirmar_Datos extends AppCompatActivity {

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

        Button Regresar = (Button) findViewById(R.id.regresar);

        Bundle parametros = getIntent().getExtras();
        assert parametros != null;
        final String str_nombre = parametros.getString(getResources().getString(R.string.pname));
        final String str_fecha = parametros.getString(getResources().getString(R.string.pdate));
        final String str_telefono = parametros.getString(getResources().getString(R.string.ptelefono));
        final String str_email = parametros.getString(getResources().getString(R.string.pemail));
        final String str_descripcion = parametros.getString(getResources().getString(R.string.pDescripcion));


        final TextView tvnombre = findViewById(R.id.Nombre_Completo_Confirmado);
        final TextView tvfecha  = findViewById(R.id.fecha_de_nacimiento_Confirmado);
        final TextView tvTelefono  = findViewById(R.id.tel_Confirmado);
        final TextView tvEmail = findViewById(R.id.mail_Confirmado);
        final TextView tvDescripcion = findViewById(R.id.Descripcion_Confirmado);

        tvnombre.setText(str_nombre);
        tvfecha.setText(str_fecha);
        tvTelefono.setText( str_telefono);
        tvEmail.setText(str_email);
        tvDescripcion.setText(str_descripcion);



        Regresar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent regresar = new Intent (Confirmar_Datos.this, MainActivity.class);
               regresar.putExtra(getResources().getString(R.string.rtname) , str_nombre);
               regresar.putExtra(getResources().getString(R.string.rtdate), str_fecha);
               regresar.putExtra(getResources().getString(R.string.rtelefono), str_telefono);
               regresar.putExtra(getResources().getString(R.string.rtemail), str_email);
               regresar.putExtra(getResources().getString(R.string.rtDescripcion), str_descripcion);
               startActivity(regresar);
            }
        });


        }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_BACK){
            Intent intent = new Intent(Confirmar_Datos.this, MainActivity.class);
            startActivity(intent);
        }
        return super.onKeyDown(keyCode, event);

    }
    }

String File

<resources>
    <string name="app_name">DesarrolloUnaApp</string>
    <string name="nombre_completo">Nombre Completo</string>
    <string name="telefono">Teléfono</string>
    <string name="email">  Email</string>
    <string name="descripcion_contacto">Descripción del Contacto</string>
    <string name="siguiente">Siguiente</string>
    <string name="date1">Fecha de Nacimiento</string>
    <string name="confirmar">Confirmar Datos</string>
    <string name="pname">Name</string>
    <string name="pdate">Date</string>
    <string name="ptelefono">Telefono</string>
    <string name="pemail">Email</string>
    <string name="pDescripcion">Descripcion</string>
    <string name="editar_datos">Editar Datos</string>
    <string name="tvdate">Date : </string>
    <string name="tvtelefono">Telefono : </string>
    <string name="tvemail">Email : </string>
    <string name="tvDescripcion">Descripcion : </string>

    <string name="rtname">Nombre</string>
    <string name="rtdate">Fecha</string>
    <string name="rtelefono">Telefono</string>
    <string name="rtemail">Email</string>
    <string name="rtDescripcion">Descripcion</string>

</resources>

Upvotes: 1

Views: 215

Answers (1)

Mahendra Gunawardena
Mahendra Gunawardena

Reputation: 1976

Try this out. In the MainActivity define SECOND_ACTIVITY variable as below

Public class MainActivity extends AppCompatActivity {
private static final int SECOND_ACTIVITY = 0;

Update the following line from

Intent regresar = new Intent (Confirmar_Datos.this, MainActivity.class);

to

Intent regresar = new Intent (this, Confirmar_Datos.class);

Replace startActivity(regresar); with

startActivityForResult(regresar, SECOND_ACTIVITY);

In the second activity replace Intent regresar = new Intent (Confirmar_Datos.this, MainActivity.class); with

Intent regresar = new Intent()

Also replace startActivity(regresar); with

setResult(Activity.RESULT_OK,regresar);
finish();

On the first activity the data will be onActivityResult

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent return_data) {
     super.onActivityResult(requestCode, resultCode, return_data);
     if (requestCode == SECOND_ACTIVITY) {
         if(resultCode == Activity.RESULT_OK){
             String result=return_data.getStringExtra("key"); // This from regresar.putExtra
          }
     }
}//onActivityResult

For additional details review the links below.


Reference:

Upvotes: 1

Related Questions