使用 LinqToTwitter 搜索功能的 NullReferenceException
NullReferenceException using LinqToTwitter Search functionality
我在我的 Xamarin.IOS 统一应用程序中使用 Nuget 的 LinqToTwitter v3.1.1 和仅应用程序身份验证,使用这个不错的库的搜索选项显示来自 TwitterAccount 的推文列表。但是,在执行简单搜索时,我在 TwitterQueryProvider 上遇到了未处理的 NullReference 异常。
我写的代码如下:
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 时会发生错误。我已验证身份验证已成功并且已设置 bearertoken。除了 Joe Mayo 自己在 LINQ to Twitter Project site on Codeplex.
上提供的简单示例外,没有做任何花哨的事情
我也尝试过一些不使用 LinqToTwitter 的方法(使用相同的凭据)直到接收推文列表,但由于序列化原因我选择使用 LinqToTwitter。
感觉好像我在这里遗漏了一些明显的东西,比如设置一些令牌或在某处授权,但找不到它。来自 codeplex 的源文件中包含的演示控制台项目似乎工作得很好。有什么想法吗?
我将您的搜索代码复制到我自己的应用程序中,并且运行良好。我使用的是 SingleUserAuthorizer
而不是 ApplicationOnlyAuthorizer
但是你的代码和我的代码的唯一区别是我 :
- 包括
accessToken
和accessTokenSecret
- 我没有线路:
await authorizer.AuthorizeAsync();
希望有点帮助
出于历史原因,我欠你们一个可能的解决方案的答案。
简而言之:手动编辑 NuGet 的 packages.config 为 linqtotwitter 设置小写 ID 似乎解决了我所有的问题。
问题从来没有真正能够自行解决。我现在正在使用 v3.1.2,也遇到了无法恢复的包问题(注意:仅在 Mac 区分大小写的 Xamarin Studio 中发生)。但是我 运行 到 this topic 的用户因为 NuGet 遇到了相当相似的问题。我手动编辑了 packages.config(在 PCL 和 iOS 项目中)以声明 id="linqtotwitter" 而不是 "LinqToTwitter",这向我展示了我所希望的魔法...
希望这对您有所帮助...
我在我的 Xamarin.IOS 统一应用程序中使用 Nuget 的 LinqToTwitter v3.1.1 和仅应用程序身份验证,使用这个不错的库的搜索选项显示来自 TwitterAccount 的推文列表。但是,在执行简单搜索时,我在 TwitterQueryProvider 上遇到了未处理的 NullReference 异常。
我写的代码如下:
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 时会发生错误。我已验证身份验证已成功并且已设置 bearertoken。除了 Joe Mayo 自己在 LINQ to Twitter Project site on Codeplex.
上提供的简单示例外,没有做任何花哨的事情我也尝试过一些不使用 LinqToTwitter 的方法(使用相同的凭据)直到接收推文列表,但由于序列化原因我选择使用 LinqToTwitter。
感觉好像我在这里遗漏了一些明显的东西,比如设置一些令牌或在某处授权,但找不到它。来自 codeplex 的源文件中包含的演示控制台项目似乎工作得很好。有什么想法吗?
我将您的搜索代码复制到我自己的应用程序中,并且运行良好。我使用的是 SingleUserAuthorizer
而不是 ApplicationOnlyAuthorizer
但是你的代码和我的代码的唯一区别是我 :
- 包括
accessToken
和accessTokenSecret
- 我没有线路:
await authorizer.AuthorizeAsync();
希望有点帮助
出于历史原因,我欠你们一个可能的解决方案的答案。
简而言之:手动编辑 NuGet 的 packages.config 为 linqtotwitter 设置小写 ID 似乎解决了我所有的问题。
问题从来没有真正能够自行解决。我现在正在使用 v3.1.2,也遇到了无法恢复的包问题(注意:仅在 Mac 区分大小写的 Xamarin Studio 中发生)。但是我 运行 到 this topic 的用户因为 NuGet 遇到了相当相似的问题。我手动编辑了 packages.config(在 PCL 和 iOS 项目中)以声明 id="linqtotwitter" 而不是 "LinqToTwitter",这向我展示了我所希望的魔法...
希望这对您有所帮助...