Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 15/03/12, 15:23:23
Array

[xs_avatar]
monchyrcg monchyrcg no está en línea
Miembro del foro
 
Fecha de registro: sep 2011
Localización: Cartagena
Mensajes: 384
Modelo de smartphone: LG Optimus Black
Tu operador: Orange
NullPointerException......

Y ahora esto!!!!

Código:
mport android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class AgendaActivity extends Activity {
    /** Called when the activity is first created. */
	
	private Agenda [] numeros;
	private ListView lista;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        
        lista = (ListView)findViewById(R.id.lista);
        rellenarAgenda();
        AdaptadorTitulares adaptador = new AdaptadorTitulares (this);
        lista.setAdapter(adaptador);
    
        registerForContextMenu(lista);
    }  
    static class ViewHolder {
    	TextView nombre;
        TextView telefono;
    }
      
    @SuppressWarnings("rawtypes")
	class AdaptadorTitulares extends ArrayAdapter{
        	
    	Activity context;
        	
        @SuppressWarnings("unchecked")
		AdaptadorTitulares (Activity context){
        	super(context, R.layout.list_layout,numeros);
        	this.context=context;
        }
        	
        public View getView(int position, View convertView, ViewGroup parent){
        	
        	View item = convertView;
        	ViewHolder holder;
        	
        	if(item == null){
        		LayoutInflater inflater = context.getLayoutInflater();
        		item = inflater.inflate(R.layout.list_layout, null);
        			
        		holder = new ViewHolder();
        		holder.nombre = (TextView) item.findViewById(R.id.nombre);
        		holder.telefono = (TextView) item.findViewById(R.id.telefono);
        			
        		item.setTag(holder);
        	}
        	else{
        		holder = (ViewHolder)item.getTag();
        	}
        		
        	holder.nombre.setText(numeros[position].getNombre());
        	holder.telefono.setText(numeros[position].getTelefono());
        	
        	return item;
        }
    }
        
       
    public void rellenarAgenda(){
    	ContentResolver cr = getContentResolver();
		
		Uri uri = ContactsContract.Contacts.CONTENT_URI;
		
		Cursor cur = cr.query(uri,null, null, null, null);
        numeros = new Agenda[cur.getCount()];
        
        if (cur.getCount() > 0) {
        	while (cur.moveToNext()) {
        		int i =0;
        		numeros[i] = new Agenda();
        		String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
        		
        		
        		String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
        		
        		if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                     Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,
                    		 ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",new String[]{id}, null);
                     while (pCur.moveToNext()) {
                    	String telefono = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    	numeros[i].setNombre(name);
                    	numeros[i].setTelefono(telefono);
                     }
        		     pCur.close();
        		}
        		i++;
        	}
        }
    }
}
Bueno pues este código tan sencillo me da una NullPointer... en estas dos lineas
Código:
holder.nombre.setText(numeros[position].getNombre());
holder.telefono.setText(numeros[position].getTelefono());
No entiendo el porque, por favor un poco de ayuda

(Para quien se pregunte porque tantos problemas y de cosas tan diversas es porque llevo varias cosas encima con proyectos básicos, para aprender el manejo de las cosas que necesito para un proyecto más grande)

Última edición por monchyrcg Día 15/03/12 a las 16:05:22.
Responder Con Cita


  #2  
Viejo 15/03/12, 15:56:59
Array

[xs_avatar]
luischo luischo no está en línea
Miembro del foro
 
Fecha de registro: jul 2009
Localización: Galicia
Mensajes: 493
Modelo de smartphone: Sony Ericsson Xperia ARC
Tu operador: Simyo
Está claro que el null es porque hay algo no inicializado. A través de Logs, mira si la agenda te la rellena antes o después de pasar por ahí y si el holder está bien inicializado. Sino siempre puedes estar accediendo a una posición del array que no existe...
__________________
- luischo -
Responder Con Cita
  #3  
Viejo 15/03/12, 15:57:16
Array

[xs_avatar]
monchyrcg monchyrcg no está en línea
Miembro del foro
 
Fecha de registro: sep 2011
Localización: Cartagena
Mensajes: 384
Modelo de smartphone: LG Optimus Black
Tu operador: Orange
Solucionado, muchas gracias!!!
Código:
  if (cur.getCount() > 0) {
        	while (cur.moveToNext()) {
        		int i =0;
        		numeros[i] = new Agenda();
Código:
  if (cur.getCount() > 0) {
                int i =0;
        	while (cur.moveToNext()) {
        		numeros[i] = new Agenda();
Que tontería una linea más arriba que más abajo
Responder Con Cita
  #4  
Viejo 15/03/12, 21:14:25
Array

[xs_avatar]
luischo luischo no está en línea
Miembro del foro
 
Fecha de registro: jul 2009
Localización: Galicia
Mensajes: 493
Modelo de smartphone: Sony Ericsson Xperia ARC
Tu operador: Simyo
Imagino que ese i lo incrementas dentro del while. No es una tontería, así siempre estás añadiendo los contactos en el numeros[0], dejando el resto sin inicializar (es decir, numeros[1] == null, numeros[2] == null, etc) quedándote siempre en el numeros[0] el último de la agenda porque lo estás machacando seguido, de ahí el nullexception.

Detalles jejeje. Me alegro haberte podido ayudar
__________________
- luischo -
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 07:08:16 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /