1

我無法爲我的GridView設置一個名爲「lista」的適配器。這是我的活動:無法在onComplete方法中設置適配器Facebook SDK,ANDROID

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) 

回答

1

你不能爲你的列表視圖設置適配器,因爲它是在null你正在做的那一刻。這就是你的堆棧跟蹤中的NullPointerException

所以這裏LISTA == NULL:

lista.setAdapter(adapter); 

你應該檢討爲什麼它是在這一點空。貌似原因是這裏

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

你正在尋找一個R.layout,但你想要的這裏是一個視圖的ìd,所以像:

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

或任何你視圖的ID是。請記住,findViewById將返回null,只要它沒有找到id。

+0

@Santi Barbat你試過這個嗎?它有幫助嗎? – donfuxx

+1

非常感謝你!這麼愚蠢的錯誤! –

相關問題