将对象传递给Intent的问题

时间:2018-09-22 23:30:26

标签: android-intent android-activity bundle

我不知道意图发生了什么,我已经对其进行了很好的回顾 但这是代码。

private void abriendoOtraVentana() {

    Intent abrirSissolServicioIntent = new Intent(getApplicationContext(), InfVisTecnico.class);
    Bundle bundle = new Bundle();
    bundle.putSerializable("ubicacionCliente",this.cliente_servicio);

    abrirSissolServicioIntent.putExtras(bundle); // the problem is here.

    startActivity(abrirSissolServicioIntent);
}

当我在提示“问题出在这里”的行上注释掉时,我的应用程序运行正常,但是当我不注释该行时,当我按按钮转到其他活动时,我的应用程序关闭。顺便说一下,对象this.cliente_servicio实现了Serializable,并且我与传递对象的其他活动具有相同的含义,并且它运行良好,我不知道这里发生了什么。如果您需要更多代码,我可以告诉您。感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

用于检索传递到Bundle的对象的密钥不正确。正确的密钥是“ ubicacionCliente”。因此整个检索看起来像这样:

Bundle recibirHorarioVisista = getIntent().getExtras();
if(recibirHorarioVisista != null){ 
     this.cliente_servi = (Cliente_Servicio)recibirHorarioVisista.getSerializable("ubicacionCliente"); 
}

答案 1 :(得分:0)

public class SisSolServicio extends AppCompatActivity implements View.OnClickListener,Serializable {



//intents que dirijen a donde quiere irse



//Bundle Donde se podria pasar datos



//Barra de progreso

private ProgressDialog barraDeProgresoInstCliente;


 //los objetos del formulario de solicitud de servicio

private EditText etNombre,etApellidos,etCelularOTel,etci;
private CheckBox checkTvCable,checkInternet;
private Button btnEnviarSolicitudServicio;


//objetos necesarios para solicitar servicio
private Ubicacion ubicacionCliente;
private Cliente clienteSolicitante;
private Servicio servicioSolicitado;
private Cliente_Servicio cliente_servicio;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sis_sol_servicio);
   recibirUbicacionCliente();
    crearLosObjetos();
   crearObjetosFormulario();

     this.btnEnviarSolicitudServicio.setOnClickListener(this);
}

private void crearLosObjetos() {// crea los objetos neceseraios para la solicitud de un servicio
    this.clienteSolicitante = new Cliente();
    this.servicioSolicitado = new Servicio();
    this.cliente_servicio = new Cliente_Servicio();

}

private void crearObjetosFormulario() {
    this.etNombre = (EditText)findViewById(R.id.etNombreSolServicio);
    this.etApellidos = (EditText) findViewById(R.id.etapellidosSolServicios);
    this.etCelularOTel = (EditText) findViewById(R.id.etnrocelotelSolServicio);
    this.etci = (EditText) findViewById(R.id.etCiSolServicio);
    this.btnEnviarSolicitudServicio = (Button)findViewById(R.id.btnEnviarSolicitudServicio);
    this.barraDeProgresoInstCliente = new ProgressDialog(this);
    this.checkInternet = (CheckBox) findViewById(R.id.checkinternetSolServicio);
    this.checkTvCable = (CheckBox) findViewById(R.id.checktvcableSolServicio);
}

@Override
public void onClick(View v) {


    this.barraDeProgresoInstCliente.setMessage("Añadiendo.....");
    this.barraDeProgresoInstCliente.show();
    llenarElObjectoClienteDeDatos();
    int c = llenarElObjetoCliente_servicio();
     if (c == 0){
         Toast.makeText(this,"Porfavor debe ingresar a lo menos un servicio",Toast.LENGTH_LONG).show();
         this.barraDeProgresoInstCliente.hide();
         return;
     }

    this.clienteSolicitante.insertarNuevoCliente(SisSolServicio.this);
    this.ubicacionCliente.insertarUbicacionCliente(SisSolServicio.this,this.clienteSolicitante.getCi());
    AñadirElObjetoCliente_servicio(c);


    this.barraDeProgresoInstCliente.hide();
    abriendoOtraVentana();
}

private void abriendoOtraVentana() {



    Intent abrirSissolServicioIntent = new Intent(SisSolServicio.this, InfVisTecnico.class);
    Bundle bundle = new Bundle();
    bundle.putSerializable("ubicacionCliente",this.cliente_servicio);

    abrirSissolServicioIntent.putExtras(bundle); // the problem is here.


    startActivity(abrirSissolServicioIntent);
}


private void AñadirElObjetoCliente_servicio(int c) {

        if(c == 1){

                if(this.checkTvCable.isChecked()){
                    this.cliente_servicio.inCliente_Servicio(this.clienteSolicitante.getCi(),200,this);
                }else{
                    this.cliente_servicio.inCliente_Servicio(this.clienteSolicitante.getCi(),100,this);
                }


        }else{
            this.cliente_servicio.inCliente_Servicio(this.clienteSolicitante.getCi(),200,this);
            this.cliente_servicio.inCliente_Servicio(this.clienteSolicitante.getCi(),100,this);
        }

}

private int llenarElObjetoCliente_servicio() {

          int c = 0;

          this.cliente_servicio.setCi_Cliente(this.clienteSolicitante.getCi());
          this.cliente_servicio.setEstado(Cliente_Servicio.PENDIENTE);
           this.cliente_servicio.setEstado_asignacion(Cliente_Servicio.NO_ASIGNADO);
           this.cliente_servicio.TratarHorayFecha();
           List<String> ListaSolicitud= verServiciosSolicitados();

           return ListaSolicitud.size();

          }

private List<String> verServiciosSolicitados() {

    List<String> servicios = new ArrayList<>();


    if(this.checkTvCable.isChecked() && this.checkInternet.isChecked()){
         servicios.add(this.checkTvCable.getText().toString()) ;
         servicios.add(this.checkInternet.getText().toString());
    }else{
        if(this.checkInternet.isChecked()){
            servicios.add(this.checkInternet.getText().toString());
        }else  {
            if(this.checkTvCable.isChecked()){
                servicios.add(this.checkTvCable.getText().toString());
            }
        }
    }

      return servicios;
}

private void llenarElObjectoClienteDeDatos() { /// estamos poblando de datos el objeto cliente

         this.clienteSolicitante.setApellido(this.etApellidos.getText().toString());
         this.clienteSolicitante.setCelular(Integer.parseInt(this.etCelularOTel.getText().toString()));
         this.clienteSolicitante.setCi(Integer.parseInt(this.etci.getText().toString()));
         this.clienteSolicitante.setNombre(this.etNombre.getText().toString());

}



private void recibirUbicacionCliente() { // recibe el objeto ubicacion del cliente

    Bundle recibirObjetoUbicacion = getIntent().getExtras();

    if(recibirObjetoUbicacion!=null){
        this.ubicacionCliente = (Ubicacion) recibirObjetoUbicacion.getSerializable("ubicacionCliente");
    }
}

}

这是InfVisTecnico活动代码:

public class InfVisTecnico extends AppCompatActivity implements View.OnClickListener {

private Cliente_Servicio cliente_servi;
private TextView tvFecha,tvHora;
private Button BtnHecho;

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


        Bundle recibirHorarioVisista = getIntent().getExtras();
        if(recibirHorarioVisista!= null){
               this.cliente_servi = (Cliente_Servicio) recibirHorarioVisista.getSerializable("ubicacionCliente");
        }


     inicializarObjetosForm();
     //mostrarDatos();

}

private void mostrarDatos() {
    this.tvFecha.setText(String.format("%s-%s-%s", String.valueOf(this.cliente_servi.getFechayhoraActual().get(Calendar.DAY_OF_MONTH)), String.valueOf(this.cliente_servi.getFechayhoraActual().get(Calendar.MONTH)), String.valueOf(this.cliente_servi.getFechayhoraActual().get(Calendar.YEAR)))
            );

     this.tvHora.setText(String.format("%s:%s", String.valueOf(this.cliente_servi.getFechayhoraActual().get(Calendar.HOUR)), String.valueOf(this.cliente_servi.getFechayhoraActual().get(Calendar.MINUTE)))
     );

}

private void inicializarObjetosForm() {
    this.tvFecha = (TextView) findViewById(R.id.tviewFechaVisita);
    this.tvHora = (TextView) findViewById(R.id.tviewHoraVisita);
    this.BtnHecho = (Button) findViewById(R.id.btnHecho);
    this.BtnHecho.setOnClickListener(this);
}




@Override
public void onClick(View v) {

}

}