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


 
Herramientas
  #1  
Viejo 15/03/12, 15:23:23
Avatar de monchyrcg
monchyrcg monchyrcg no está en línea
Miembro del foro
Mensajes: 384
 
Fecha de registro: sep 2011
Localización: Cartagena
Mensajes: 384
Modelo de smartphone: LG Optimus Black
Versión de ROM: v10d
Tu operador: Orange
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Avatar de luischo
luischo luischo no está en línea
Miembro del foro
Mensajes: 493
 
Fecha de registro: jul 2009
Localización: Galicia
Mensajes: 493
Modelo de smartphone: Sony Ericsson Xperia ARC
Versión de ROM: De serie
Tu operador: Simyo
Mencionado: 1 comentarios
Tagged: 0 hilos
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...
Responder Con Cita
  #3  
Viejo 15/03/12, 15:57:16
Avatar de monchyrcg
monchyrcg monchyrcg no está en línea
Miembro del foro
Mensajes: 384
 
Fecha de registro: sep 2011
Localización: Cartagena
Mensajes: 384
Modelo de smartphone: LG Optimus Black
Versión de ROM: v10d
Tu operador: Orange
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Avatar de luischo
luischo luischo no está en línea
Miembro del foro
Mensajes: 493
 
Fecha de registro: jul 2009
Localización: Galicia
Mensajes: 493
Modelo de smartphone: Sony Ericsson Xperia ARC
Versión de ROM: De serie
Tu operador: Simyo
Mencionado: 1 comentarios
Tagged: 0 hilos
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
Responder Con Cita
Respuesta

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

Herramientas

Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 22:01:25 (GMT +2)

Cookies settings
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007