Question

I cannot set an adapter to my GridView called "lista". This is my Activity:

public class ListaAmigos extends Activity {

private String TAG = "ListaAmigos";
protected static Context context;
private GridView lista;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.lista_amigos);
    context = getApplicationContext();

    lista = (GridView) findViewById(R.layout.lista_amigos);

    Session session = Session.getActiveSession();

    if (session != null && session.isOpened()) {
        facebookRequest(session);
    }

}

private void facebookRequest(Session session) {
    Request friendsRequest = createRequest(session);
    RequestAsyncTask requestAsync = new RequestAsyncTask(friendsRequest);
    requestAsync.execute();

    friendsRequest.setCallback(new Request.Callback() {
        @Override
        public void onCompleted(Response response) {
            List<GraphUser> friends = getResults(response);

            ListarAmigosAdapter adapter = new ListarAmigosAdapter(context,
                    friends);

            lista.setAdapter(adapter);

        }

    });
}

private Request createRequest(Session session) {
    Request request = Request.newGraphPathRequest(session, "me/friends",
            null);

    Set<String> fields = new HashSet<String>();
    String[] requiredFields = new String[] { "id", "name",
            "picture.type(large)" };
    fields.addAll(Arrays.asList(requiredFields));

    Bundle parameters = request.getParameters();
    parameters.putString("fields", TextUtils.join(",", fields));
    request.setParameters(parameters);

    return request;
}

private List<GraphUser> getResults(Response response) {
    GraphMultiResult multiResult = response
            .getGraphObjectAs(GraphMultiResult.class);
    GraphObjectList<GraphObject> data = multiResult.getData();
    return data.castToListOf(GraphUser.class);
}

}


And my adapter:

public class ListarAmigosAdapter extends BaseAdapter {

private List<GraphUser> friends;
private BitmapLruCache imageCache;
private Context context;

public ListarAmigosAdapter(Context context, List<GraphUser> friends) {
    this.friends = friends;
    this.context = context;
    imageCache = new BitmapLruCache();
}

public int getCount() {
    return friends.size();
}

public GraphUser getItem(int position) {
    return friends.get(position);
}

public long getItemId(int position) {
    return Long.parseLong(friends.get(position).getId());
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View itemView = convertView;
    ViewHolder holder = null;
    if (convertView == null) {
        LayoutInflater inflater = LayoutInflater.from(ListaAmigos.context);
        convertView = inflater.inflate(R.layout.un_amigo, null);

        holder = new ViewHolder();

        holder.mRequestQueue = Volley.newRequestQueue(ListaAmigos.context);
        holder.imageLoader = new ImageLoader(holder.mRequestQueue,
                imageCache);

        holder.position = position;
        holder.foto = (NetworkImageView) convertView
                .findViewById(R.id.imagen);
        holder.nombre = (TextView) convertView.findViewById(R.id.nombre);
        convertView.setTag(holder);
    }

    JSONObject friendsJSON = friends.get(position).getInnerJSONObject();

    try {
        holder.nombre.setText(friendsJSON.getString("name"));

    } catch (JSONException e) {
        Log.d("JSON error " + e.getMessage(), "ERROR JSON");
    }

    return itemView;
}

static class ViewHolder {
    ImageLoader imageLoader;
    RequestQueue mRequestQueue;
    NetworkImageView foto;
    TextView nombre;
    int position;
}

}


And the error:

02-18 19:27:02.561: E/AndroidRuntime(25109): FATAL EXCEPTION: main
02-18 19:27:02.561: E/AndroidRuntime(25109): java.lang.NullPointerException
02-18 19:27:02.561: E/AndroidRuntime(25109):    at com.ardroid.fav.lista_amigos.ListaAmigos$1.onCompleted(ListaAmigos.java:59)
02-18 19:27:02.561: E/AndroidRuntime(25109):    at com.facebook.Request$4.run(Request.java:1669)
02-18 19:27:02.561: E/AndroidRuntime(25109):    at android.os.Handler.handleCallback(Handler.java:615)
02-18 19:27:02.561: E/AndroidRuntime(25109):    at android.os.Handler.dispatchMessage(Handler.java:92)
02-18 19:27:02.561: E/AndroidRuntime(25109):    at android.os.Looper.loop(Looper.java:137)
02-18 19:27:02.561: E/AndroidRuntime(25109):    at android.app.ActivityThread.main(ActivityThread.java:4867)
02-18 19:27:02.561: E/AndroidRuntime(25109):    at java.lang.reflect.Method.invokeNative(Native Method)
02-18 19:27:02.561: E/AndroidRuntime(25109):    at java.lang.reflect.Method.invoke(Method.java:511)
02-18 19:27:02.561: E/AndroidRuntime(25109):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
02-18 19:27:02.561: E/AndroidRuntime(25109):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
02-18 19:27:02.561: E/AndroidRuntime(25109):    at dalvik.system.NativeStart.main(Native Method)
Was it helpful?

Solution

you cannot set adapter for your list view because it is null at the moment you are doing it. That is what the NullPointerException in your stacktrace is about.

so here lista == null:

 lista.setAdapter(adapter);

You should review why it is null at this point. Looks like the reason is here

  lista = (GridView) findViewById(R.layout.lista_amigos);

you are looking up a R.layout but what you want here is an ìd of a view, so something like:

  lista = (GridView) findViewById(R.id.lista_amigos);

or whatever the id of your view is. Keep in mind that findViewById will return null whenever it does not find the id.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top