Ver Mensaje Individual
  #3 (permalink)  
Antiguo 14/06/2011, 11:55
tazmaniator
 
Fecha de Ingreso: noviembre-2008
Mensajes: 49
Antigüedad: 15 años, 5 meses
Puntos: 4
Exclamación Respuesta: como actualizar un listview personalizado

Si esa parte la entiendo bien pero el detalle es q cuando ejecuto la aplicacion por primera vez no marca esa excepcion, lo q hago es q verifico si viene null, si es asi muestro un alert pidiendo q haga un registro, y despues mediante un menu contextual elimino un elemento del ListView y de la base de datos, y lo q hago es volver a cargar el arreglo dentro del ArrayAdapter, y me funciona siempre y cuando aun tenga elementos en el arreglo, pero si elimino el ultimo elemento del arreglo y la base de datos me marca esa excepcion, mi pregunta es como puedo evitar esa excepcion permitiendo recibir el null.

aqui dejo el codigo de la actividad donde hago todo el proceso:

Código JAVA:
Ver original
  1. package Password.Principal;
  2.  
  3. import android.app.Activity;
  4. import android.content.Intent;
  5. import android.database.Cursor;
  6. import android.os.Bundle;
  7. import android.view.ContextMenu;
  8. import android.view.ContextMenu.ContextMenuInfo;
  9. import android.view.LayoutInflater;
  10. import android.view.MenuInflater;
  11. import android.view.MenuItem;
  12. import android.view.View;
  13. import android.view.View.OnLongClickListener;
  14. import android.view.ViewGroup;
  15. import android.view.View.OnClickListener;
  16. import android.widget.AdapterView.AdapterContextMenuInfo;
  17. import android.widget.ArrayAdapter;
  18. import android.widget.CheckBox;
  19. import android.widget.CompoundButton;
  20. import android.widget.ImageButton;
  21. import android.widget.ListView;
  22. import android.widget.TextView;
  23. import android.widget.Toast;
  24. import usuario.Alerts;
  25. import usuario.ManejadorBD;
  26. import usuario.Password;
  27. import android.widget.CompoundButton.OnCheckedChangeListener;
  28.  
  29. public class Principal extends Activity {
  30.  
  31.     public Password[] datos = null;
  32.     public Alerts alerta = new Alerts();
  33.     public AdaptadorPasswords contras = null;
  34.     public ListView contrasenias = null;
  35.     public int posicion = 0,posId=0;
  36.     public ManejadorBD cnx = null;
  37.  
  38.  
  39.     /** Called when the activity is first created. */
  40.     @Override
  41.     public void onCreate(Bundle savedInstanceState) {
  42.         super.onCreate(savedInstanceState);
  43.         setContentView(R.layout.principal);
  44.         try {
  45.             datos=this.getPasswords();
  46.             if (datos == null) {
  47.                 alerta.showWarning("Registrar Passwords",
  48.                         "Debe registrar la información", Principal.this);
  49.             } else {
  50.                 contras = new AdaptadorPasswords(this);
  51.             }
  52.  
  53.             contrasenias = (ListView) findViewById(R.id.contrasenias);
  54.             contrasenias.setAdapter(contras);
  55.  
  56.             ImageButton añadir = (ImageButton) findViewById(R.id.agregar);
  57.             ImageButton borrar = (ImageButton) findViewById(R.id.eliminar);
  58.  
  59.             añadir.setOnClickListener(new OnClickListener() {
  60.  
  61.                 public void onClick(View v) {
  62.                     // TODO Auto-generated method stub
  63.                     Intent envio = new Intent(Principal.this, NewPassword.class);
  64.                     Bundle opc=new Bundle();
  65.                     opc.putString("operacion", "registrar");
  66.                     envio.putExtras(opc);
  67.                     setResult(RESULT_OK, envio);
  68.                     startActivity(envio);
  69.                 }
  70.             });
  71.  
  72.             borrar.setOnClickListener(new OnClickListener() {
  73.  
  74.                 @Override
  75.                 public void onClick(View v) {
  76.                     // TODO Auto-generated method stub
  77.  
  78.                 }
  79.             });
  80.         } catch (Exception e) {
  81.             alerta.showWarning("Error en la Aplicación",
  82.                     "Se ha producido un error", Principal.this);
  83.         } catch (Throwable e) {
  84.             // TODO Auto-generated catch block
  85.             alerta.showWarning("Error en la Aplicación",
  86.                     "Se ha producido un error", Principal.this);
  87.         }
  88.     }
  89.  
  90.     public void onCreateContextMenu(ContextMenu menu, View v,
  91.             ContextMenuInfo menuInfo) {
  92.         super.onCreateContextMenu(menu, v, menuInfo);
  93.  
  94.         MenuInflater inflater = getMenuInflater();
  95.         inflater.inflate(R.menu.menusecundario, menu);
  96.     }
  97.  
  98.     @Override
  99.     public boolean onContextItemSelected(MenuItem item) {
  100.  
  101.         @SuppressWarnings("unused")
  102.         AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
  103.                 .getMenuInfo();
  104.  
  105.         switch (item.getItemId()) {
  106.         case R.id.editar:
  107.             Intent envio = new Intent(Principal.this, NewPassword.class);
  108.             Bundle opc=new Bundle();
  109.             opc.putString("operacion", "editar");
  110.             opc.putInt("id", datos[posicion].getId());
  111.             envio.putExtras(opc);
  112.             setResult(RESULT_OK, envio);
  113.             startActivity(envio);
  114.             return true;
  115.         case R.id.eliminar:
  116.             Password pswd = new Password();
  117.             Toast msj2 = null;
  118.             if (pswd.eliminarPassword(Principal.this, datos[posicion].getId())) {
  119.                 msj2 = Toast.makeText(Principal.this,
  120.                         "El registro se ha eliminado correctamente... ", Toast.LENGTH_SHORT);
  121.                 msj2.show();
  122.                 datos=this.getPasswords();
  123.                 if(datos.length>0 || datos!=null){             
  124.                   contras=new AdaptadorPasswords(this);
  125.                   contrasenias.setAdapter(contras);
  126.                 }else{
  127.                     alerta.showWarning("Registrar Passwords",
  128.                             "Debe registrar la información", Principal.this);
  129.                 }
  130.                
  131.             } else {
  132.                 msj2 = Toast.makeText(Principal.this,
  133.                         "El registro no se ha podido eliminar correctamente.. "
  134.                                 + datos[posicion].getId(), Toast.LENGTH_SHORT);
  135.                 msj2.show();
  136.             }
  137.             return true;
  138.         case R.id.mostrar:
  139.             Intent envio2= new Intent(Principal.this,Contras.class);
  140.             Bundle idContra=new Bundle();
  141.             idContra.putInt("Id", datos[posicion].getId());
  142.             envio2.putExtras(idContra);
  143.             setResult(RESULT_OK, envio2);
  144.             startActivity(envio2);
  145.             return true;
  146.         default:
  147.             return super.onContextItemSelected(item);
  148.         }
  149.     }
  150.  
  151.     public Password[] getPasswords(){
  152.         Password[] psws=null;
  153.         cnx = new ManejadorBD(Principal.this, "passwordsBD", 1, 'r');
  154.         Cursor c = cnx.consultar("SELECT * FROM passwords", null);
  155.         if (c == null || c.getCount()==0)
  156.             psws=null;
  157.         else {
  158.             if (c.moveToFirst()) {
  159.                 int pos = 0;
  160.                 int limite = c.getCount();
  161.                 psws = new Password[limite];
  162.                 do {
  163.                     int id = c.getInt(0);
  164.                     String sitio = c.getString(1);
  165.                     String user = c.getString(2);
  166.                     String contra = c.getString(3);
  167.                     String preg = c.getString(4);
  168.                     String resp = c.getString(5);
  169.                     String corAlt = c.getString(6);
  170.                     psws[pos] = new Password(id, sitio, user, contra,
  171.                             preg, resp, corAlt);
  172.                     pos++;
  173.                 } while (c.moveToNext());
  174.             }else{
  175.                 psws=null;
  176.             }
  177.         }
  178.         c.close();
  179.         return (psws); 
  180.     }
  181.    
  182.     @SuppressWarnings("rawtypes")
  183.     class AdaptadorPasswords extends ArrayAdapter {
  184.  
  185.         Activity context;
  186.  
  187.         @SuppressWarnings("unchecked")
  188.         AdaptadorPasswords(Activity context) {
  189.             super(context, R.layout.lista, datos);
  190.             this.context = context;
  191.         }
  192.  
  193.         public View getView(final int position, View convertView,
  194.                 ViewGroup parent) {
  195.             View item = convertView;
  196.             final ViewHolder holder;
  197.  
  198.             if (item == null) {
  199.                 LayoutInflater inflater = context.getLayoutInflater();
  200.                 item = inflater.inflate(R.layout.lista, null);
  201.  
  202.                 holder = new ViewHolder();
  203.                 holder.titulo = (TextView) item.findViewById(R.id.Titulo);
  204.                 holder.subtitulo = (TextView) item.findViewById(R.id.Subtitulo);
  205.                 holder.activacion = (CheckBox) item
  206.                         .findViewById(R.id.activacion);
  207.  
  208.                 holder.activacion
  209.                         .setOnCheckedChangeListener(new OnCheckedChangeListener() {
  210.  
  211.                             @Override
  212.                             public void onCheckedChanged(
  213.                                     CompoundButton buttonView, boolean isChecked) {
  214.                                 // TODO Auto-generated method stub
  215.                                 if(isChecked)
  216.                                 {
  217.                                     posId++;
  218.                                 }
  219.                                 else
  220.                                 {
  221.                                     posId--;
  222.                                 }
  223.                                 Toast msj = Toast.makeText(Principal.this,
  224.                                         "el posId"+posId, Toast.LENGTH_SHORT);
  225.                                 msj.show();
  226.                             }
  227.                         });
  228.  
  229.                 item.setOnClickListener(new OnClickListener() {
  230.  
  231.                     @Override
  232.                     public void onClick(View v) {
  233.                         // TODO Auto-generated method stub
  234.                         Intent envio = new Intent(Principal.this, Contras.class);
  235.                         Bundle psw = new Bundle();
  236.                         psw.putInt("Id", datos[position].getId());
  237.                         envio.putExtras(psw);
  238.                         setResult(RESULT_OK, envio);
  239.                         startActivity(envio);
  240.                     }
  241.                 });
  242.  
  243.                 item.setOnLongClickListener(new OnLongClickListener() {
  244.  
  245.                     @Override
  246.                     public boolean onLongClick(View v) {
  247.                         // TODO Auto-generated method stub
  248.                         posicion = position;
  249.                         return false;
  250.                     }
  251.                 });
  252.  
  253.                 registerForContextMenu(item);
  254.  
  255.                 item.setTag(holder);
  256.             } else {
  257.                 holder = (ViewHolder) item.getTag();
  258.             }
  259.  
  260.             holder.titulo.setText(datos[position].getSitio());
  261.             holder.subtitulo.setText(datos[position].getUsuario());
  262.  
  263.             return (item);
  264.         }
  265.     }
  266.  
  267.     static class ViewHolder {
  268.         TextView titulo;
  269.         TextView subtitulo;
  270.         CheckBox activacion;
  271.     }
  272. }