Xamarin.ios 解析Facebook好友列表
在统一api之前,我一直使用以下代码解析Facebook的好友列表:Xamarin.ios 解析Facebook好友列表,xamarin.ios,xamarin,Xamarin.ios,Xamarin,在统一api之前,我一直使用以下代码解析Facebook的好友列表: var list = new List<FacebookFriend>(); var graphObject = result as FBGraphObject; using (var array = (NSMutableArray)graphObject[new NSString("data")]) { for (uint i = 0; i < array.Count; i++) {
var list = new List<FacebookFriend>();
var graphObject = result as FBGraphObject;
using (var array = (NSMutableArray)graphObject[new NSString("data")])
{
for (uint i = 0; i < array.Count; i++)
{
using (var friend = new NSDictionary(array.ValueAt (i)))
{
friends.Add (new FacebookFriend
{
ID = friend.ObjectForKey (new NSString ("uid")).ToString (),
Name = friend.ObjectForKey (new NSString ("name")).ToString (),
});
}
}
}
数组如下所示:
数组{id=10000910208340;name=Patricia Amijajbjhcdj Wongsky;},{id=100009036398265;name=Patricia Amijcfcihbfe Vijayvergiyasen;},{id=10000908691584;name=Elizabeth Amijhfiaehd Bharambesky;}
但是现在NSDictionary的保护级别发生了变化,这段代码中断了。
我尝试过使用一些工厂方法,但没有成功
有人知道在这种情况下应该使用什么而不是
new NSDictionary(array.ValueAt (i)))
谢谢,应该是这样的:
Runtime.GetNSObject array.ValueAt i
旁注:在循环中创建相同的NSString常量是没有效率的。你应该这样做:
using (var uid = new NSString ("uid"))
using (var name = new NSString ("name")) {
for (uint i = 0; i < array.Count; i++) {
using (var friend = Runtime.GetNSObject<NSDictionary> (array.ValueAt (i))) {
friends.Add (new FacebookFriend
{
ID = friend.ObjectForKey (uid).ToString (),
Name = friend.ObjectForKey (name).ToString (),
});
}
}
我已经编译了答案并添加了一个get,这可能会对某些人有所帮助,因为我花了几天的时间才弄明白如何在Xamarin IOS中的统一API和Facebook SDK V2.2上实现这个请求
List<string> mUserFriendsList = new List<string>();
if(FBSession.ActiveSession.IsOpen)
{
var dic = new NSDictionary();
FBRequestConnection.StartWithGraphPath("me/friends?fields=id",dic,"GET",(connection,result,error) =>
{
if(error != null){
Console.WriteLine(error.Description);
InvokeOnMainThread (() => new UIAlertView ("Error!", "An error has occured while trying to connect to facebook. Please try again later.", null, "Ok", null).Show ());
}else{
var graphObject = result as FBGraphObject;
using (var array = (NSMutableArray)graphObject[new NSString("data")])
{
using(var id = new NSString("id"));
for (uint i = 0; i < array.Count; i++)
{
using (var friend = Runtime.GetNSObject<NSDictionary> (array.ValueAt (i)))
{
mUserFriend = friend["id"].ToString ();
mUserFriendsList.Add (mUserFriend);
}
}
}
}
});
}
List<string> mUserFriendsList = new List<string>();
if(FBSession.ActiveSession.IsOpen)
{
var dic = new NSDictionary();
FBRequestConnection.StartWithGraphPath("me/friends?fields=id",dic,"GET",(connection,result,error) =>
{
if(error != null){
Console.WriteLine(error.Description);
InvokeOnMainThread (() => new UIAlertView ("Error!", "An error has occured while trying to connect to facebook. Please try again later.", null, "Ok", null).Show ());
}else{
var graphObject = result as FBGraphObject;
using (var array = (NSMutableArray)graphObject[new NSString("data")])
{
using(var id = new NSString("id"));
for (uint i = 0; i < array.Count; i++)
{
using (var friend = Runtime.GetNSObject<NSDictionary> (array.ValueAt (i)))
{
mUserFriend = friend["id"].ToString ();
mUserFriendsList.Add (mUserFriend);
}
}
}
}
});
}