2012-02-22 8 views
2

をスローします。 私はFacebook C#SDK 5.4.1を使用して、Silverligth 5アプリケーション(ブラウザ内)から画像をアップロードしています。FacebookのC#SDKは、私はFacebookのイメージのアップロードに苦しんだ例外ArgumentNullException

認証が働いていると私は必要な権限で私のアクセストークンを取得します。 は(私は私のSilverlightアプリケーションをリロードする必要はありませんので、クッキーに私のアクセストークンを格納しています。)

は、これは私のコードです:例外のPostCompletedイベントにスローされ

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); 
      })); 
     } 
    } 

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)} 

ありがとうございました。

答えて

2

私はこの問題を自分で考え出しました。

画像のエンコードが間違っている場合は、Facebookが単に応答しないしないので、あなたが例外ArgumentNullExceptionを取得します。 また、私はこれを試しましたsolution(Silverlight 5はWriteableBitmap.SaveJpeg()をサポートしていないため、少しコードが微調整されています)、HTTPエラー404は私が受け取ったレスポンスでした。

誰にも同様の問題(と私は:-)だったと混同される)多分私は(ブラウザ内のFacebook C#SDK 5.4.1とSilverlight 5を使用して)、次の解決策を支援することができますencouters場合:

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 from Codeplex

注意:この機能を利用するには、有効なaccess_tokenが必要です。

+0

答えとしてマークすることを検討してください。フォローアップをありがとう。 –

関連する問題