2013-11-15 58 views
0

我正在整合Facebook的SDK在我的应用程序。我需要获取用户的朋友姓名和生日。我添加了“read_friendlists”,“user_birthday”,“user_friends”,“friends_birthday”。Facebook好友生日

当使用应用程序的管理员Facebook帐户登录时,我可以正确地获取生日清单。但是,当我使用任何其他帐户登录时,JSON响应中没有生日字段。

PS:我已经禁用了沙盒模式。在应用程序仪表板显示“这个应用程序是活的(可见所有用户)”

+0

,你可以看到这个帖子太[这里] [1] [1]:http://stackoverflow.com/questions/14000802/android-getting-friends-birthday-using-graph-api-facebook-sdk-3-0?rq = 1 –

回答

0

为JSON对象,请放一些代码让我们来帮助你。 我personnaly用这个来得到facebook用户的生日 首先你有设置user_birthday的权限吗?如果您要访问user_birthday信息

如果用户不为空,通常你可以得到由user.getBirthday()的生日是非常重要的,因为从我看到你正在使用的新的Facebook SDK

你当使用Facebook authbutton

authButton.setReadPermissions(Arrays.asList("user_location", "user_birthday", "user_likes")); 

,或者你可以重新授权许可

Session.ReauthorizeRequest reauthRequest = new Session.ReauthorizeRequest(this, PERMISSIONS). 
       setRequestCode(REAUTHORIZE_ACTIVITY). 
       setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK); 
session.reauthorizeForPublish(reauthRequest); 

哪里的,你可以设置例如许可权限是包含您的许可数组

+0

感谢您的回复...请注意,我想获取用户的朋友生日,而不是用户... – lingareddyk

0

OK试试这个

String[] facebook_permissions = { "user_photos", "friends_birthday", "friends_photos" }; 

========================================================================== 

public class FriendListAdapter extends BaseAdapter implements SectionIndexer { 
private LayoutInflater mInflater; 
private String[] sections; 
private GetProfilePictures picturesGatherer = null; 
FriendsList friendsList; 
Hashtable<Integer, FriendItem> listofshit = null; 

public FriendListAdapter(FriendsList friendsList) { 
    Log.d(LOG_TAG, "FriendListAdapter()"); 
    this.friendsList = friendsList; 
    sections = new String[getCount()]; 
    listofshit = new Hashtable<Integer, FriendItem>(); 
    for (int i = 0; i < getCount(); i++) { 
     try { 
    sections[i] = jsonArray.getJSONObject(i).getString("name").substring(0); 
sections[i] = jsonArray.getJSONObject(i).getString("birthday").substring(1); 
     } catch (JSONException e) { 
      sections[i] = ""; 
      Log.e(LOG_TAG, "getJSONObject: " + e.getMessage()); 
     } 
    } 
    if (picturesGatherer == null) { 
     picturesGatherer = new GetProfilePictures(); 
    } 
    picturesGatherer.setAdapterForListener(this); 
    mInflater = LayoutInflater.from(friendsList.getBaseContext()); 
} 

public int getCount() { 
    Log.d(LOG_TAG, "getCount()"); 
    if (jsonArray == null) 
     return 0; 
    return jsonArray.length(); 
} 

public Object getItem(int position) { 
    Log.d(LOG_TAG, "getItem()"); 
    return listofshit.get(position); 
} 

public long getItemId(int position) { 
    Log.d(LOG_TAG, "getItemId()"); 
    return position; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    Log.d(LOG_TAG, "getView(" + position + ")"); 

    JSONObject jsonObject = null; 
    try { 
     jsonObject = jsonArray.getJSONObject(position); 
    } catch (JSONException e) { 
     Log.e(LOG_TAG, "getJSONObject: " + e.getMessage()); 
    } 

    FriendItem friendItem; 

    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.single_friend, null); 
     friendItem = new FriendItem(); 

     convertView.setTag(friendItem); 
    } 
    else { 
     friendItem = (FriendItem) convertView.getTag(); 
    } 

    friendItem.friendPicture = (ImageView) convertView.findViewById(R.id.picture_square); 
    friendItem.friendName = (TextView) convertView.findViewById(R.id.name); 
    friendItem.friendDob = (TextView) convertView.findViewById(R.id.dob); 
    friendItem.friendLayout = (RelativeLayout) convertView.findViewById(R.id.friend_item); 

    try { 
     String uid = jsonObject.getString("uid"); 
     String url = jsonObject.getString("pic_square"); 
     friendItem.friendPicture.setImageBitmap(picturesGatherer.getPicture(uid, url)); 
    } catch (JSONException e) { 
     Log.e(LOG_TAG, "getJSONObject: " + e.getMessage()); 
     friendItem.friendName.setText(""); 
     friendItem.friendDob.setText(""); 
    } 

    try { 
     friendItem.friendName.setText(jsonObject.getString("name")); 
     friendItem.friendDob.setText(jsonObject.getString("birthday")); 
    } catch (JSONException e) { 
     Log.e(LOG_TAG, "getJSONObject: " + e.getMessage()); 
     friendItem.friendName.setText(""); 
     friendItem.friendDob.setText(""); 
    } 

    listofshit.put(position, friendItem); 

    return convertView; 
} 

public int getPositionForSection(int position) { 
    return position; 
} 

public int getSectionForPosition(int position) { 
    return position; 
} 

public Object[] getSections() { 
    return sections; 
} 
} 

class FriendItem { 
TextView friendDob; 
int id; 
ImageView friendPicture; 
TextView friendName; 
RelativeLayout friendLayout; 

} 

============================================================================== 

String query = "select name, uid, pic_square, birthday from user where uid in 
(select uid2 from friend where uid1=me()) order by name"; 
+0

,你可以在这里看到这篇文章[链接](http://stackoverflow.com/questions/14000802/android-getting-friends-birthday-using-图的API-Facebook的SDK-3-0?RQ = 1) –