Oscar C. Oscar C. - 5 months ago 25
Java Question

Intent does not send values from editText, android

I am trying to pass a parameter from one activity (ActividadInsercionObjeto) to another (DatosSensor) using intents, but I have been trying with non exit. I am not sure what I am doing wrong.

The value I need to pass is the last value called idObjeto in the photo.jpg. This value comes from a SQLite which has been synchronized with remote MySql, so when the origin activity is opened, the values come inside of the fields.

When I press a button then the activity would have to take the value from

campoIdObjeto
which is the value of "idObjeto in the photo" and then it would have to send this value to sencond activity and show it in a toast.
When I execute the app, it stops and send this message:


java.lang.NullPointerException: Attempt to invoke virtual method

'android.os.Bundle android.content.Intent.getExtras()' on a null
object reference.


Photo:
photoscreen
I do not know why it does not take the value...

Any help will be welcome.
Thanks
Oscar

Activity origin:

public class ActividadInsercionObjeto extends AppCompatActivity
implements LoaderManager.LoaderCallbacks<Cursor>, View.OnClickListener {

// Referencias UI
private EditText campodescripcionNombre;
private EditText campoMarca;
private EditText campoModelo;
private EditText campoCorreo;
private EditText campoIdObjeto;
private Button accesodata;
public final static String EXTRA_ID = "idObjeto";
public EditText IdentidadObjeto;

// Clave del uri del objeto como extra
public static final String URI_OBJETO = "extra.uriObjeto";

private Uri uriObjeto;

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

//agregarToolbar();

// Encontrar Referencias UI
campodescripcionNombre = (EditText) findViewById(R.id.campo_descripcion_nombre);
campoMarca = (EditText) findViewById(R.id.campo_marca);
campoModelo = (EditText) findViewById(R.id.campo_modelo);
campoCorreo = (EditText) findViewById(R.id.campo_correo);
campoIdObjeto = (EditText) findViewById(R.id.campo_idObjeto);


accesodata = (Button) findViewById(R.id.accesodata);
accesodata.setOnClickListener(this);


// Determinar si es detalle
String uri = getIntent().getStringExtra(URI_OBJETO);
if (uri != null) {
setTitle(R.string.titulo_actividad_editar_objeto);
uriObjeto = Uri.parse(uri);
getSupportLoaderManager().restartLoader(1, null, this);
}

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_insercion_objeto, menu);

// Verificación de visibilidad acción eliminar
if (uriObjeto != null) {
menu.findItem(R.id.accion_eliminar).setVisible(true);
}

return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.accion_confirmar:
insertar();
break;
case R.id.accion_eliminar:
eliminar();
break;
}
return super.onOptionsItemSelected(item);
}


private void insertar() {

// Extraer datos de UI
String descripcionNombre = campodescripcionNombre.getText().toString();
String marca = campoMarca.getText().toString();
String modelo = campoModelo.getText().toString();
String correo = campoCorreo.getText().toString();
String IdentidadObjeto = campoIdObjeto.getText().toString();

// Validaciones y pruebas de cordura
if (!esNombreValido(descripcionNombre)) {
TextInputLayout mascaraCampoNombre = (TextInputLayout)findViewById(R.id.mascara_campo_nombre);

// esta linea la he añadido, si da fallo eliminar. Sujerida por corrector
assert mascaraCampoNombre != null;
// esta linea la he añadido, si da fallo eliminar. Sujerida por corrector fin
mascaraCampoNombre.setError("este campo no puede quedar vacio");
} else {

ContentValues valores = new ContentValues();

// Verificación: ¿Es necesario generar un id?
if (uriObjeto == null) {
valores.put(Objetos.ID_OBJETO, Objetos.generarIdObjeto());
}
valores.put(Objetos.DESCRIPCION_NOMBRE, descripcionNombre);
valores.put(Objetos.MARCA_MARCA, marca);
valores.put(Objetos.MODELO, modelo);
valores.put(Objetos.CORREO, correo);
valores.put(Objetos.VERSION, UTiempo.obtenerTiempo());

// Iniciar inserción|actualización
new TareaAnadirObjeto(getContentResolver(), valores).execute(uriObjeto);

finish();
}
}

private boolean esNombreValido(String nombre) {
return !TextUtils.isEmpty(nombre);
}

private void eliminar() {
if (uriObjeto != null) {
// Iniciar eliminación
new TareaEliminarObjeto(getContentResolver()).execute(uriObjeto);
finish();
}
}


private void poblarViews(Cursor data) {
if (!data.moveToNext()) {
return;
}

// Asignar valores a UI
campodescripcionNombre.setText(UConsultas.obtenerString(data, Objetos.DESCRIPCION_NOMBRE));
campoMarca.setText(UConsultas.obtenerString(data, Objetos.MARCA_MARCA));
campoModelo.setText(UConsultas.obtenerString(data, Objetos.MODELO));
campoCorreo.setText(UConsultas.obtenerString(data, Objetos.CORREO));
campoIdObjeto.setText(UConsultas.obtenerString(data, Objetos.ID_OBJETO));

}

@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
return new CursorLoader(this, uriObjeto, null, null, null, null);
}

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
poblarViews(data);
}

@Override
public void onLoaderReset(Loader<Cursor> loader) {
}

@Override
public void onClick(View v) {



if (v == accesodata) {
Intent i = new Intent(ActividadInsercionObjeto.this, DatosSensor.class);

i.putExtra("IdentidadEnviada", (Serializable) campoIdObjeto);
startActivity(i);
}

}


static class TareaAnadirObjeto extends AsyncTask<Uri, Void, Void> {
private final ContentResolver resolver;
private final ContentValues valores;

public TareaAnadirObjeto(ContentResolver resolver, ContentValues valores) {
this.resolver = resolver;
this.valores = valores;
}

@Override
protected Void doInBackground(Uri... args) {
Uri uri = args[0];
if (null != uri) {

Cursor c = resolver.query(uri, new String[]{Objetos.INSERTADO}, null, null, null);

if (c != null && c.moveToNext()) {

// Verificación de sincronización
if (UConsultas.obtenerInt(c, Objetos.INSERTADO) == 0) {
valores.put(Objetos.MODIFICADO, 1);
}

valores.put(Objetos.VERSION, UTiempo.obtenerTiempo());
resolver.update(uri, valores, null, null);
}

} else {
resolver.insert(Objetos.URI_CONTENIDO, valores);
}
return null;
}

}

static class TareaEliminarObjeto extends AsyncTask<Uri, Void, Void> {
private final ContentResolver resolver;

public TareaEliminarObjeto(ContentResolver resolver) {
this.resolver = resolver;
}

@Override
protected Void doInBackground(Uri... args) {


Cursor c = resolver.query(args[0], new String[]{Objetos.INSERTADO}
, null, null, null);

int insertado;

if (c != null && c.moveToNext()) {
insertado = UConsultas.obtenerInt(c, Objetos.INSERTADO);
} else {
return null;
}

if (insertado == 1) {
resolver.delete(args[0], null, null);
} else if (insertado == 0) {
ContentValues valores = new ContentValues();
valores.put(Objetos.ELIMINADO, 1);
resolver.update(args[0], valores, null, null);
}

return null;
}
}

}


Destiny Activity:

public class DatosSensor extends AppCompatActivity {

private DrawerLayout drawerLayout;
String idObjeto = (String) getIntent().getExtras().getSerializable("IdentidadEnviada");


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

Toast.makeText(getApplicationContext(),idObjeto, Toast.LENGTH_LONG).show();

agregarToolbar();

drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);


if (navigationView != null) {
prepararDrawer(navigationView);
// Seleccionar item por defecto
seleccionarItem(navigationView.getMenu().getItem(0));
}
}


private void agregarToolbar() {
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
final ActionBar ab = getSupportActionBar();
if (ab != null) {
// Poner ícono del drawer toggle
ab.setHomeAsUpIndicator(R.drawable.drawer_toggle);
ab.setDisplayHomeAsUpEnabled(true);
}

}

private void prepararDrawer(NavigationView navigationView) {
navigationView.setNavigationItemSelectedListener(
new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
menuItem.setChecked(true);
seleccionarItem(menuItem);
drawerLayout.closeDrawers();
return true;
}
});

}



private void seleccionarItem(MenuItem itemDrawer) {
Fragment fragmentoGenerico = null;

FragmentManager fragmentManager = getSupportFragmentManager();




switch (itemDrawer.getItemId()) {


startActivity(new Intent(this, com.amg_eservices.appiot.SaltoWeb.WebOficial.class));
break;

//fragmentoGenerico = new BlankFragment();


case R.id.item_categorias:
startActivity(new Intent(this, com.amg_eservices.appiot.MisSensores.ui.ActividadListaObjeto.class));
break;

case R.id.item_acceso:
startActivity(new Intent(this, com.amg_eservices.appiot.RegistroyAcceso.MainActivity.class));
break;
}
if (fragmentoGenerico != null) {
fragmentManager
.beginTransaction()
.replace(R.id.contenido_principal, fragmentoGenerico)
.commit();


}

// Setear titulo actual
setTitle(itemDrawer.getTitle());
}



@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_actividad_principal, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
drawerLayout.openDrawer(GravityCompat.START);
return true;
}
return super.onOptionsItemSelected(item);
}


}

Answer

You want to pass the value of campoIdObjeto, so instead of:

i.putExtra("IdentidadEnviada", (Serializable) campoIdObjeto);

write:

i.putExtra("IdentidadEnviada", (Serializable) campoIdObjeto.getText().toString());

EditText is not serialisable, so you can't pass it. But you can pass it's value.

Comments