|
||
|
![]() |
![]() |
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
|
||||
|
||||
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++; } } } } Código:
holder.nombre.setText(numeros[position].getNombre()); holder.telefono.setText(numeros[position].getTelefono()); (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. |
|
#2
|
||||
|
||||
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 -
|
#3
|
||||
|
||||
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(); |
#4
|
||||
|
||||
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 -
|
![]() |
![]() |
||||||
|