Facebook C # SDK выбрасывает ArgumentNullException - PullRequest
2 голосов
/ 22 февраля 2012

Я борюсь с загрузкой изображений в Facebook.Я использую Facebook C # SDK 5.4.1 для загрузки изображения из моего приложения Silverligth 5 (в браузере).

Аутентификация работает, и я получаю свой токен доступа с необходимыми разрешениями.(Я храню свой токен доступа в файле cookie, поскольку не хочу, чтобы мое приложение Silverlight перезагружалось.)

Это мой код:

void img_LoadingCompleted(object sender, EventArgs e)
    {

        Dispatcher.BeginInvoke(new Action(() => { string fbcode = ReadCookie("FBCode");

        ExtendedImage img = sender as ExtendedImage;
        string myAppId = "MY_APPID";
        string myAppSecret = "MY_SECRET";

        FacebookClient fbclient = new FacebookClient(fbcode);
        fbclient.PostCompleted += new EventHandler<FacebookApiEventArgs>(fbclient_PostCompleted);

        FacebookMediaObject image = new FacebookMediaObject
        {
            ContentType = "image/jpg",
            FileName = "Testpic"
        };
        image.SetValue(img.Pixels);

        IDictionary<string, object> photoDetails = new Dictionary<string, object>
            {
                {"message", "Test"},
                {"source", image}
            };

        fbclient.PostAsync("/me/photos", photoDetails);
        }));
    }

    void fbclient_PostCompleted(object sender, FacebookApiEventArgs e)
    {
        if (e.Cancelled)
        {
            Dispatcher.BeginInvoke(new Action(() =>
            {
                MessageBox.Show("Cancelled: "+e.Error);
            }));
        }
    }

Исключение выдается вPostCompleted событие FacebookClient.

{System.ArgumentNullException: Der Wert darf nicht NULL sein.
Parametername: stream
   bei System.IO.StreamReader..ctor(Stream stream, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean leaveOpen)
   bei System.IO.StreamReader..ctor(Stream stream)
   bei Facebook.FacebookClient.ProcessResponse(HttpHelper httpHelper, Stream responseStream, Type resultType, String& responseStr, Exception& exception, Boolean& cancelled)}

Спасибо за вашу помощь.

1 Ответ

2 голосов
/ 23 февраля 2012

Я сам выяснил проблему.

Если кодировка изображения неправильная, вы получите ArgumentNullException, потому что Facebook просто не отвечает.Я также попробовал это решение (немного подправил код, потому что Silverlight 5 не поддерживает WriteableBitmap.SaveJpeg ()), и HTTP-ошибка 404 была ответом, который я получил.

Если кто-нибудьеще поддерживает подобную проблему (и смущен, как и я :-)), может быть, я могу помочь со следующим решением (используя Facebook C # SDK 5.4.1 и Silverlight 5 In-Browser):

JpegEncoder JE = new JpegEncoder();
MemoryStream M = new MemoryStream();
JE.Encode(Img.ToImage(), M);

Byte[] ImgData = new Byte[M.Length];
M.Seek(0, SeekOrigin.Begin);
M.Read(ImgData, 0, (int)M.Length);

FacebookClient fbclient = new FacebookClient(fbcode);
fbclient.UploadProgressChanged += new EventHandler<FacebookUploadProgressChangedEventArgs>(fbclient_UploadProgressChanged);
fbclient.PostCompleted += new EventHandler<FacebookApiEventArgs>(fbclient_PostCompleted);

FacebookMediaObject image = new FacebookMediaObject
{
    ContentType = "image/jpg",
    FileName = "Testpic"
};
image.SetValue(ImgData);

IDictionary<string, object> photoDetails = new Dictionary<string, object>
{
     {"message", "Test"},
     {"source", image}
};

new Thread(new ParameterizedThreadStart((fbc) => { StartWait(); ((FacebookClient)fbc).PostAsync("me/photos", photoDetails); })).Start(fbclient);

Гдепеременная Img является WriteableBitmap.Для правильной кодировки я использую Imagetools от Codeplex

ВНИМАНИЕ: Вам нужен действительный токен доступа, чтобы это работало!

...