NullReferenceException с использованием функции поиска LinqToTwitter

Я использую LinqToTwitter v3.1.1 от Nuget с проверкой подлинности только для приложений в своем унифицированном приложении Xamarin.IOS, чтобы отобразить список твитов из учетной записи Twitter, используя параметр поиска этой прекрасной библиотеки. Однако при выполнении простого поиска я получаю необработанное исключение NullReference Exception в TwitterQueryProvider.

Код, который я написал, выглядит следующим образом:

var credentialStore = new InMemoryCredentialStore
{
    ConsumerKey = "MyTwitterKey",
    ConsumerSecret = "MyTwitterSecret"
};

var authorizer = new ApplicationOnlyAuthorizer { CredentialStore = credentialStore };
await authorizer.AuthorizeAsync();

var twitterCtx = new TwitterContext(authorizer);

var searchResponse = await (from search in twitterCtx.Search
                           where search.Type == SearchType.Search 
                              && search.Query == "Microsoft"
                          select search)
                                 .SingleOrDefaultAsync();

if (searchResponse != null && searchResponse.Statuses != null)
{
    foreach (var tweet in searchResponse.Statuses)
    {
        Debug.WriteLine("User: {0}, Tweet: {1}", tweet.User.ScreenNameResponse, tweet.Text);
    }
}

Часть трассировки стека ниже:

{System.NullReferenceException: Object reference not set to an instance of an object 
 at LinqToTwitter.TwitterQueryProvider+<ExecuteAsync>d__6`1[System.Collections.Generic.IEnumerable`1[LinqToTwitter.Search]].MoveNext () [0x00000] in <filename unknown>:0
 --- End of stack trace from previous location where exception was thrown --- 

 at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000b] in [somepath]/System.Runtime.ExceptionServices/ExceptionDispatchInfo.cs:62 
 at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1+ConfiguredTaskAwaiter[System.Object].GetResult () [0x00034] in [somepath]/System.Runtime.CompilerServices/ConfiguredTaskAwaitable_T.cs:62 
 at LinqToTwitter.TwitterExtensions+<ToListAsync>d__11`1[LinqToTwitter.Search].MoveNext () [0x00000] in <filename unknown>:0 
 --- End of stack trace from previous location where exception was thrown --- 

 at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000b] in [somepath]/System.Runtime.ExceptionServices/ExceptionDispatchInfo.cs:62 
 at System.Runtime.CompilerServices.TaskAwaiter`1[System.Collections.Generic.List`1[LinqToTwitter.Search]].GetResult () [0x00034] in [somepath]/System.Runtime.CompilerServices/TaskAwaiter_T.cs:59 
 at [somepath].TwitterService+<GetTweets>d__2.MoveNext () [0x0014f] in [somepath]\TwitterService.cs:27 }

Ошибки возникают, когда поиск выполняется и помещается в var searchResponse. Я подтвердил, что аутентификация прошла успешно и был установлен токен носителя. Никаких необычных вещей не было сделано, кроме простого примера, предоставленного самим Джо Мэйо на сайте проекта LINQ to Twitter на Codeplex.

Я также пробовал кое-что без использования LinqToTwitter, который работал (с теми же учетными данными) вплоть до получения списка твитов, но из-за причин сериализации я решил использовать LinqToTwitter.

Такое ощущение, что я упускаю здесь что-то очевидное, например, установку какого-то токена или авторизацию где-то, но не могу найти. Проект демонстрационной консоли, включенный в исходные файлы из codeplex, работает отлично. Любые идеи здесь?


person Hutjepower    schedule 14.01.2015    source источник
comment
Что-нибудь, кто-нибудь? Все еще действует!   -  person Hutjepower    schedule 19.01.2015


Ответы (2)


В исторических целях я должен вам ответить на возможное решение.

Вкратце: ручное редактирование пакетов NuGet.config для установки идентификатора в нижнем регистре для linqtotwitter, похоже, устраняет все мои проблемы.

Проблема так и не смогла решиться сама собой. Сейчас я использую версию 3.1.2, и у меня также возникли проблемы с пакетом, который невозможно восстановить (примечание: это происходит только с Xamarin Studio на Mac, где учитывается регистр). Но затем я столкнулся с этой темой из пользователи испытывают довольно похожие проблемы из-за NuGet. Я отредактировал package.config вручную (как в PCL, так и в проекте iOS), чтобы объявить id="linqtotwitter" вместо "LinqToTwitter", что показало мне магию, на которую я надеялся...

Надеюсь это поможет...

person Hutjepower    schedule 28.04.2015

Я скопировал ваш поисковый код в свое собственное приложение, и оно сработало нормально. Я использую SingleUserAuthorizer, а не ApplicationOnlyAuthorizer, но единственная разница в вашем коде и моем заключается в том, что я:

  • Включить accessToken и accessTokenSecret
  • У меня нет строки: await authorizer.AuthorizeAsync();

Надеюсь, это немного поможет

person redhotbelgian    schedule 12.03.2015
comment
Спасибо за комментарий, однако, поскольку я использую этот конкретный ApplicationOnlyAuthorizer для приложения, мне бесполезно создавать пользователя-призрака... - person Hutjepower; 28.04.2015