2013-02-11 51 views
3

在登錄頁面中,我獲得了ACCESS_TOKEN。 但在Friendlist頁面中,我沒有獲得ACCESS_TOKEN。 我的代碼如下。請檢查我的代碼。必須使用活動訪問令牌來查詢有關當前用戶的信息。

用戶登錄代碼

mFacebook.authorize(this, sPermissions, new AuthorizeListener()); 

我用AuthorizeListener()。此代碼

 public class AuthorizeListener implements DialogListener { 
     String actoken; 
     @Override 
     public void onComplete(Bundle values) { 
      if (MainFragment.FacebookD) { 
       Log.w(MainFragment.LOG_TAG, "::: onComplate :::"); 
       Log.w(MainFragment.LOG_TAG, "Access token : " + mFacebook.getAccessToken()); 
       Token = mFacebook.getAccessToken(); 
      actoken = getAppPreferences(IntroActivity.this, "ACCESS_TOKEN"); 
      Log.w("GETAPPPREFERENCES",actoken); 
      } 
     } 
    ...... 

我還寫了onActivityResult方法。這段代碼。

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

     if (requestCode == MainFragment.FACEBOOK_AUTH_CODE) { 
      mFacebook.authorizeCallback(requestCode, resultCode, data); 
      Log.w("ACTIVITYRESULT","ACTIVITYRESULT"); 

        } 
    } 
    ...... 
    Intent intent = new Intent(IntroActivity.this, NorinuriMain.class); 
      startActivity(intent); 

在登錄後,頁面的意圖(獲取好友列表)

獲取好友列表代碼

public void setupFacebookfriend(){ 
    Log.w("FacebookFREIND","START"); 
    String userName; 
    String userSex; 

    try { 
     Log.w("gogogogo","START"); 

     final JSONObject json = Util.parseJson(mFacebook.request("me/friends")); 
     JSONArray d = json.getJSONArray("data"); 
     JSONObject o ; 
     for(int i = 0 ; i < d.length() ; i++){ 
      JSONObject post=d.getJSONObject(i); 
      o = d.getJSONObject(i); 
      list.add(o.getString("data")); 
      list.add(post.getString("name")); 
     } 

    }catch (Exception e) { 
     e.printStackTrace(); 
    } 
    facebookListView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, list)); 
    facebookListView.setItemsCanFocus(false); 
    facebookListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
} 

這個邏輯是確定。但發生錯誤。

com.facebook.android.FacebookError:必須使用活動訪問令牌來查詢有關當前用戶的信息。

爲什麼會發生?

回答

0

當Facebook對象沒有有效的訪問令牌時,會出現此錯誤。嘗試獲取Facebook好友列表時,您必須檢查會話是否有效。

if (mFacebook.isSessionValid()) { 
      Bundle parameters = new Bundle(); 
      parameters.putString("message", msg); 
      try { 
       String response = mFacebook.request("me/friends", parameters, 
         "GET"); 
       System.out.println(response); 

       JSONObject obj = Util.parseJson(response); 

       Log.i("json Response", obj.toString()); 
       JSONArray array = obj.optJSONArray("data"); 

       if (array != null) { 
        for (int i = 0; i < array.length(); i++) { 
         String name = array.getJSONObject(i).getString("name"); 

         String id = array.getJSONObject(i).getString("id"); 

         Log.i(name, id); 
         arrayListFacebookFriend.add(name); 
         arrayListFacebookFriendId.add(id); 
         // String response2 = mFacebook.request(id+"/feed", 
         // parameters,"POST"); 
         // System.out.println(response); 
         // response = mFacebook.request(toID+"/feed", 
         // parameters, "POST"); 
        } 
        Log.d("arrayList of Friend>>>>", "" 
          + arrayListFacebookFriend); 

       } 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } catch (FacebookError e) { 
       e.printStackTrace(); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } else { 
      mFacebook.authorize(this, sPermissions, new AuthorizeListener()); 
     } 

檢查有關此鏈接的詳細信息:

Android Facebook .. how to get AccessToken

How to provide permission for login in my android application if user has fb account

我希望這將解決您的問題。

相關問題