2011-11-18 74 views
0

我一直在努力与Android和Facebook的图形API,我敢肯定,这是中级程序员的小菜一碟。我想要的是一个非常简单的Android应用程序,它将用户登录到Facebook,获得用户同意访问信息,最后无缝地查询图形API以获取用户朋友。我提到工作无缝,因为我看到许多示例应用程序需要用户按下“获取朋友”按钮,但我不想那样做。我希望提取用户朋友而不要求他推送任何东西。使用Facebook-Android SDK访问朋友的麻烦

我粘贴了下面的代码。我可以登录并授予我的应用程序许可。接下来,我期望它展示我的朋友,但它只是指引我到一个空白页面。问题可能是我在错误的地方访问了图形API,因为Logcat不包含我在请求前后打印的消息。你可以帮我吗。

公共类FacebookLogin延伸活动{

Facebook mFacebook = new Facebook("XXXXXXXXXXXX"); 
AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(mFacebook); 
View linearLayout; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    linearLayout = findViewById(R.id.main_layout); 

    mFacebook.authorize(this, new DialogListener() { 
     @Override 
     public void onComplete(Bundle values) 
     { 
      Log.d("Facebook-Example-Friends Request", "Started API request"); 
      mAsyncRunner.request("me/friends", new FriendsRequestListener()); 
      Log.d("Facebook-Example-Friends Request", "Finished API request"); 
     } 

     @Override 
     public void onFacebookError(FacebookError error) {} 

     @Override 
     public void onError(DialogError e) {} 

     @Override 
     public void onCancel() {} 
    }); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    mFacebook.authorizeCallback(requestCode, resultCode, data); 
} 

public class FriendsRequestListener implements RequestListener 
{ 
    /** 
    * Called when the request to get friends has been completed. 
    * Retrieve, parse and display the JSON stream. 
    */ 
    public void onComplete(final String response) 
    { 
     Log.d("Facebook-Example-Friends Request", "FriendsListenerOnComplete"); 

     try 
     { 
      JSONObject json = Util.parseJson(response); 
      final JSONArray friends = json.getJSONArray("data"); 

      FacebookLogin.this.runOnUiThread(new Runnable() 
      { 
       public void run() 
       { 
        int l = (friends != null ? friends.length() : 0); 

        for (int i=0; i<l; i++) 
        { 
         try 
         { 
          JSONObject o = friends.getJSONObject(i); 

          TextView tv = new TextView(FacebookLogin.this); 
          tv.setText(o.getString("name")); 
          ((LinearLayout) linearLayout).addView(tv); 
         } 
         catch(JSONException e) 
         { 
          Toast.makeText(getApplicationContext(), "JSON parsing error", Toast.LENGTH_LONG); 
         } 
        } 
       } 
      }); 
     } 
     catch(JSONException e) 
     { 
      Log.d("Facebook-Example-Friends Request", "JSON Error in response"); 
     } 
     catch(FacebookError e) 
     { 
      Log.d("Facebook-Example-Friends Request", "Facebook Error in response"); 
     } 
    } 
} 

}

+0

不logcat wr ite“已启动API请求”?如果不尝试在onOnError,onError,onCancel中添加Log.d以查看它说的是什么。 – Daverix

回答