1

编辑-----:所以我确实设法让它显示我的用户并能够选择一些,并且将选定的用户发送回我的应用程序,但存在一个小问题。 “Uri.parse(” 选择器://朋友 “);”不给我我的朋友的名单,但只有我的朋友列表,并安装了我的应用程序。如何使用FB FriendPickerFragment向您显示所有朋友的名单,以邀请他们使用您的应用程序

我跟着这个例子:https://developers.facebook.com/docs/android/scrumptious/show-friends但我想修改它,所以基本上我拿出了selectionActivity和Fragment。所以我从我的活动中有一个调用PickerActivity的按钮,它包含FriendPickerFragment。我可以从那里选择我的朋友,但回到我的活动onActivityResult我回来“数据”为空。

我有一个应用程序类在我的应用程序,我保存FB会话,并且也有登录功能。

在我的MainActivity的onCreate我有这样的:

MyApp.getInstance().facebookLogin(PSAddFriendsActivity.this, new CrudStateCallback() { 
     @Override 
     public void onResponse(final String string) { 
      Log.i("", "session : session is opened? : " + MyApp.getInstance().fbSession.getAccessToken());    
     } 
    }); 

已经登录后,我实例与当前的朋友,我在我的应用程序列表,该列表的第一个位置是FB按钮:

@Override 
protected void onListItemClick(ListView l, View v, int position, long id){ 
    super.onListItemClick(l, v, position, id); 
    if(position == 0){ 
      startPickerActivity(PSPickerActivity.FRIEND_PICKER, 0); 
    }else if(position ==1){ 
     //TODO: OPEN CONTACTS PAGE TO ADD FRIENDS   
    } 

} 

这是我onACtivityResult从这个类中的 “startPickerActivity”:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); 
    Log.i("","--------------data is : " + data); 
    Log.i("","--------------resultCode is : " + resultCode); 
    Log.i("","--------------requestCode is : " + requestCode); 

} 

public void startPickerActivity(Uri data, int requestCode) { 
    Intent intent = new Intent(); 
    intent.setData(data); 
    intent.setClass(PSAddFriendsActivity.this, PickerActivity.class); 
    startActivityForResult(intent, requestCode); 
} 

这是PickerActivity,我怎么把它从FB:

public class PickerActivity extends FragmentActivity{ 
private FriendPickerFragment friendPickerFragment; 
public static final Uri FRIEND_PICKER = Uri.parse("picker://friend"); 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.pickers); 

    Bundle args = getIntent().getExtras(); 
    FragmentManager manager = getSupportFragmentManager(); 
    Fragment fragmentToShow = null; 
    Uri intentUri = getIntent().getData(); 

    if (FRIEND_PICKER.equals(intentUri)) { 
     if (savedInstanceState == null) { 
      friendPickerFragment = new FriendPickerFragment(args); 
     } else { 
      friendPickerFragment = 
        (FriendPickerFragment) manager.findFragmentById(R.id.picker_fragment); 
     } 
     // Set the listener to handle errors 
     friendPickerFragment.setOnErrorListener(new PickerFragment.OnErrorListener() { 
      @Override 
      public void onError(PickerFragment<?> fragment, 
           FacebookException error) { 
       PSPickerActivity.this.onError(error); 
      } 
     }); 
     // Set the listener to handle button clicks 
     friendPickerFragment.setOnDoneButtonClickedListener(
       new PickerFragment.OnDoneButtonClickedListener() { 
        @Override 
        public void onDoneButtonClicked(PickerFragment<?> fragment) { 
         finishActivity(); 
        } 
       }); 
     fragmentToShow = friendPickerFragment; 

    } else { 
     // Nothing to do, finish 
     setResult(RESULT_CANCELED); 
     finish(); 
     return; 
    } 

    manager.beginTransaction() 
      .replace(R.id.picker_fragment, fragmentToShow) 
      .commit(); 
} 

private void onError(Exception error) { 
    onError(error.getLocalizedMessage(), false); 
} 

private void onError(String error, final boolean finishActivity) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setTitle(R.string.error_dialog_title). 
      setMessage(error). 
      setPositiveButton(R.string.error_dialog_button_text, 
        new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialogInterface, int i) { 
          if (finishActivity) { 
           finishActivity(); 
          } 
         } 
        }); 
    builder.show(); 
} 

private void finishActivity() { 
    setResult(RESULT_OK, null); 
    finish(); 
} 

@Override 
protected void onStart() { 
    super.onStart(); 
    if (FRIEND_PICKER.equals(getIntent().getData())) { 
     try { 
      friendPickerFragment.loadData(false); 
     } catch (Exception ex) { 
      onError(ex); 
     } 
    } 
} 

@Override 
protected void onResume() { 
    Log.i("", "location test onResume"); 
    super.onResume(); 
    MyApp.getInstance().pref.setIsBackground(this, false); 
    MyApp.getInstance().startLocationClient(); 
} 

@Override 
protected void onPause() { 
    Log.i("", "location test onPause"); 
    super.onPause(); 
    MyApp.getInstance().pref.setIsBackground(this, true); 
} 
} 

现在我看了看这个片段,不知道是不是我需要补充一下或保存的东西从“onDoneButtonClicked”的片段?或者什么,因为我的主要活动并返回null作为数据..

回答

0

忘记在finishActivty调用这个:

if (FRIEND_PICKER.equals(getIntent().getData())) { 
     if (friendPickerFragment != null) { 
      MyApp.getInstance().setSelectedUsers(friendPickerFragment.getSelection()); 
     } 
    } 

现在我可以从我的应用程序中获得选择的用户列表。

关于我的编辑,在此之后,我发现用Graph2.0你不能得到你的整个朋友列表的列表。您只能找回也喜欢该应用的朋友的信息。有可能邀请朋友喜欢一个应用程序,但只有当您将其设置为来自FB开发者页面的游戏

+0

这是我删除Facebook SDK的主要原因之一。没有能够显示所有好友邀请,这是没用的。 – KVISH

相关问题