1

Windows Phone アプリを開始したばかりで、すべてのユーザーのフォローを取得する必要があります。私はこれを試しました

SharedState.Authorizer = pinAuth;
ITwitterAuthorizer auth = SharedState.Authorizer;
TwitterContext twitterCtx = new TwitterContext(auth);

var friendList =
    (from friend in twitterCtx.SocialGraph
        where friend.Type == SocialGraphType.Friends && friend.ScreenName == "_TDK"
        select friend)
    .SingleOrDefault();

List<String> Followings;
foreach (var id in friendList.ScreenName)
{
    Followings.Add(id.ToString());
}

しかし、friendlistは常にnullであり、明らかに、foreachはそれを好まず、 をスローしexceptionます。

誰かが私を助けることができますか?

ありがとう。

4

2 に答える 2

1

次のように、ID コレクションを反復処理する必要があると思います。

foreach (var id in friendList.IDs)
{
    Followings.Add(id.ToString());
}

Windows Phone を含む Silverlight ベースのアプリで非同期呼び出しを行う必要があります。クエリをリファクタリングする方法の例を次に示します。

var twitterCtx = new TwitterContext(auth);

(from social in twitterCtx.SocialGraph
 where social.Type == SocialGraphType.Followers &&
       social.ScreenName == "JoeMayo"
 select social)
.MaterializedAsyncCallback(asyncResponse =>
     Dispatcher.BeginInvoke(() =>
     {
         if (asyncResponse.Status != TwitterErrorStatus.Success)
         {
              MessageBox.Show(
                  "Error during query: " + 
                  asyncResponse.Exception.Message);
              return;
         }

         SocialGraph social = asyncResponse.State.SingleOrDefault();

         SocialListBox.ItemsSource = social.IDs;
     }));

MaterializedAsyncCallback は、Twitter からのコールバックを管理します。コールバックはワーカー スレッド上にあるため、Dispatcher.BeginInvoke を使用してコールバックを UI スレッドにマーシャリングする方法に注目してください。asyncResponse コールバック パラメーターで、Status を使用してエラーがあるかどうかを確認し、State を使用してクエリが成功した場合にデータを取得します。

于 2013-02-06T18:20:49.627 に答える
1

私は同じ問題を抱えていました、私はこの方法で解決しました(私はそれが最善の方法ではないことを知っています)

public void getProfile(MyProgressBar myprogressbar)
{
    var auth = new SingleUserAuthorizer
    {
        Credentials = new InMemoryCredentials
        {
            ConsumerKey = GlobalVariables.ConsumerKey,
            ConsumerSecret = GlobalVariables.ConsumerSecret,
            AccessToken = GlobalVariables.AccessToken,
            OAuthToken = GlobalVariables.AccessTokenSecret
        }
    };

    using (var twitterCtx = new TwitterContext(auth, "https://api.twitter.com/1/", "https://search.twitter.com/"))
    {
        //Log
        twitterCtx.Log = Console.Out;

        var queryResponse = (from tweet in twitterCtx.Status
                             where tweet.Type == StatusType.User && tweet.ScreenName == GlobalVariables.ScreenName
                             select tweet);

        queryResponse.AsyncCallback(tweets =>
            Deployment.Current.Dispatcher.BeginInvoke(() =>
            {
                var publicTweets = (from tweet in tweets
                                    select tweet).FirstOrDefault();
                s.TwitterName = publicTweets.User.Name.ToString();
                s.TwitterScreenName = "@" + GlobalVariables.ScreenName;
                s.TwitterDescription = publicTweets.User.Description.ToString();
                s.TwitterStatus = publicTweets.User.StatusesCount.ToString() + " Tweets / " + publicTweets.User.FriendsCount.ToString() + " Following / " + publicTweets.User.FollowersCount.ToString() + " Followers";
                s.TwitterImage = publicTweets.User.ProfileImageUrl.ToString();

                myprogressbar.ShowProgressBar = false;

            })).SingleOrDefault();
    }
}
于 2013-02-06T13:55:10.010 に答える