2013-04-08 2 views
1

Прошу this учебник по созданию новой папки на skydrive из моего приложения WP7.WP7 Skydrive API - создание папки не работает

Вот мой код:

private void MSAccountLoginToggleSwitch_Checked_1(object sender, RoutedEventArgs e) 
    { 
     try 
     { 
      LiveAuthClient auth = new LiveAuthClient("** my id **"); 
      auth.LoginAsync(new string[] { "wl.skydrive_update", "wl.calendars_update" }); 
      auth.LoginCompleted += auth_LoginCompleted; 
     } 
     catch (LiveAuthException exception) 
     { 
      MessageBox.Show("Error signing in: " + exception.Message); 
     } 
    } 

    private void auth_LoginCompleted(object sender, LoginCompletedEventArgs e) 
    { 
     if (e.Status == LiveConnectSessionStatus.Connected) 
     { 
      mySession = e.Session; 
     } 
     else 
     { 
      MSAccountLoginToggleSwitch.IsChecked = false; 
     } 
    } 

    private void Button_Click_1(object sender, RoutedEventArgs e) 
    { 
     try 
     { 
      var folderData = new Dictionary<string, object>(); 
      folderData.Add("some test", "A brand new folder was created"); 

      LiveConnectClient liveClient = new LiveConnectClient(mySession); 
      liveClient.PostAsync("me/skydrive", folderData); 
     } 
     catch (LiveConnectException exception) 
     { 
      MessageBox.Show("Error creating folder: " + exception.Message); 
     } 
     finally 
     { 
      MessageBox.Show("uploded"); 
     } 
    } 

это показать мне MessageBox «закачано», но когда я смотрю на мой SkyDrive, что файл не был создан.

Не отображается сообщение об ошибке, что я делаю worng?

ответ

1

Я нашел проблему у меня есть ошибка в строке:

folderData.Add("some test", "A brand new folder was created"); 

правильная версия:

folderData.Add("name", "some test"); 
+0

Пожалуйста, отметьте этот ответ как решение. – outcoldman

1

Эта строка liveClient.PostAsync("me/skydrive", folderData); дает вам задание, которое вы не ждете, вы просто показываете MessageBox.Show("uploded"); в конце. Я не думаю, что async/await поддерживаются в WP7, так что вам нужно будет обрабатывать задачи с помощью метода ContinueWith:

private void Button_Click_1(object sender, RoutedEventArgs e) 
{ 
     var folderData = new Dictionary<string, object>(); 
     folderData.Add("some test", "A brand new folder was created"); 

     LiveConnectClient liveClient = new LiveConnectClient(mySession); 
     liveClient.PostAsync("me/skydrive", folderData) 
        .ContinueWith((t) => 
           { 
            if (t.IsFauled) 
            { 
             MessageBox.Show("Error creating folder: " + t.Exception.Message); 
            } 
            else 
            { 
             MessageBox.Show("uploded"); 
            } 
           } 
           , TaskScheduler.FromCurrentSynchronizationContext()); 

} 

ОБНОВЛЕНО: Код выше будет работать только на WP8, но на WP7 PostAsync не метод с задачей, поэтому для получения результата PostAsync вам необходимо подписаться на событие PostCompleted.

+0

метод PostAsync ("мне/SkyDrive", folderData) в WP7 является недействительным, так что я не ожидайте этого – Earlgray

+0

Затем вам нужно подписаться на событие [PostCompleted] (http://msdn.microsoft.com/en-us/library/live/microsoft.live.liveconnectclient.postcompleted.aspx). – outcoldman

+0

FYI, async/await поддерживаются в 7.1 проектах, учитывая, что вы используете Visual Studio 2012. –

0
var folderData = new Dictionary<string,object>(); 
    folderData.Add("myfolder ","simple folder ");  
    client.PostAsync("me/skydrive","{'name': 'myfolder' }"); 

client.PostCompleted += new EventHandler<LiveOperationCompletedEventArgs>   (client_PostCompleted); 

    void client_PostCompleted(object sender, LiveOperationCompletedEventArgs e) 
    { 
     var a = e.RawResult; 
    } 
Смежные вопросы