PDA

Ver la Versión Completa : [ SOLUCIONADO ] NullPointerException......


monchyrcg
15/03/12, 15:23:23
Y ahora esto!!!!


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.CO NTENT_URI,null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",new String[]{id}, null);
while (pCur.moveToNext()) {
String telefono = pCur.getString(pCur.getColumnIndex(ContactsContrac t.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

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)

luischo
15/03/12, 15:56:59
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...

monchyrcg
15/03/12, 15:57:16
Solucionado, muchas gracias!!!

if (cur.getCount() > 0) {
while (cur.moveToNext()) {
int i =0;
numeros[i] = new Agenda();



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

luischo
15/03/12, 21:14:25
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 :)