java - 无法在 onComplete 方法中设置适配器 Facebook SDK,ANDROID

标签 java android facebook-android-sdk android-adapter baseadapter

我无法为名为“lista”的 GridView 设置适配器。这是我的 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);
}


还有我的适配器:

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;
}


错误:

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)

最佳答案

您不能为您的 ListView 设置适配器,因为它在您执行此操作时为 null。这就是堆栈跟踪中的 NullPointerException 的含义。

所以这里 lista == null:

 lista.setAdapter(adapter);

此时您应该查看为什么它为空。看来原因就在这里

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

你正在查找一个 R.layout 但你在这里想要的是一个 View 的 ìd,所以像这样:

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

或者您的view 的id。请记住,findViewById 将在找不到 id 时返回 null。

关于java - 无法在 onComplete 方法中设置适配器 Facebook SDK,ANDROID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21866979/

相关文章:

java - 如何使用 GPUImage 库 "subtract"滤色器?

android - 如何为 RoboGuice 禁用 RoboBlender

android - 如何在 Android 应用程序中使用 Facebook 登录按钮获取 FB 用户 ID

java - 如何在SpringBootTest中添加一个bean

java - 从 Eclipse ADT 迁移到 Android Studio 2.1 - 错误 : package android. support.v4.view 不存在

android - 为什么我的 jQuery Mobile 应用程序无法在 Android 4.0.3 浏览器中正确显示?

android facebook 发布照片

java - EDT 和其他Thread 关系关于repaint() 方法java

java - 安装Android Carbon图书馆的正确方法是什么?

android - 在android中获取Facebook用户详细信息