C# 在windows 8.1手机应用程序中使用REST API自动填充
我正在实现一个城市搜索,因此我希望自动填充功能,当我选择一个城市时,我希望将ID发送回API。以填充其他一些字段C# 在windows 8.1手机应用程序中使用REST API自动填充,c#,windows-phone-8.1,windows-store-apps,C#,Windows Phone 8.1,Windows Store Apps,我正在实现一个城市搜索,因此我希望自动填充功能,当我选择一个城市时,我希望将ID发送回API。以填充其他一些字段 private async void AutoSuggestBox_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args) { if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInp
private async void AutoSuggestBox_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args)
{
if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInput)
{
string text = sender.Text;
if (text.Length >= 3)
{
GetCities(text);
sender.ItemsSource = await Task<string[]>.Run(() => { return this.GetSuggestions(text); });
}
else
{
sender.ItemsSource = new string[] { "No suggestions..." };
}
}
}
private async void AutoSuggestBox\u TextChanged(AutoSuggestBox发送方、autosuggestboxtextchangedventargs args)
{
if(args.Reason==AutoSuggestionBoxTextChangeReason.UserInput)
{
string text=sender.text;
如果(text.Length>=3)
{
GetCities(文本);
sender.ItemsSource=wait Task.Run(()=>{返回this.GetSuggestions(text);});
}
其他的
{
sender.ItemsSource=新字符串[]{“无建议…”;
}
}
}
我的反应课
private async void GetCities(string city)
{
try
{
string baseAddress = Url.url + "searchCities?q="+city+"&access_token=" + tcm;
HttpClient httpClient = new HttpClient();
string co = "";
var content = await httpClient.GetAsync(new Uri(baseAddress));
if (!content.IsSuccessStatusCode)
{
TokenGenerator tc = new TokenGenerator();
tc.GetToken();
tcm = TokenManager.accessT.access_tocken;
HttpClient client = new HttpClient();
content = await client.GetAsync(new Uri(baseAddress));
}
co = await content.Content.ReadAsStringAsync();
AutofillHelper result = JsonConvert.DeserializeObject<AutofillHelper>(co);
foreach (var item in result.data)
{
suggestions = new string [] {item.city} ;
}
}
catch (Exception ex)
{
dispatcherTimer.Stop();
throw new Exception(ex.ToString());
}
}
private string[] GetSuggestions(string text)
{
string[] result = null;
result = suggestions.Where(x => x.StartsWith(text)).ToArray();
return result;
}
private async void GetCities(字符串城市)
{
尝试
{
字符串baseAddress=Url.Url+“searchCities?q=“+city+”&access_token=“+tcm;
HttpClient HttpClient=新HttpClient();
字符串co=“”;
var content=await-httpClient.GetAsync(新Uri(baseAddress));
如果(!content.IsSuccessStatusCode)
{
TokenGenerator tc=新的TokenGenerator();
tc.GetToken();
tcm=TokenManager.accessT.access\u tocken;
HttpClient=新的HttpClient();
content=wait client.GetAsync(新Uri(baseAddress));
}
co=await content.content.ReadAsStringAsync();
AutofillHelper结果=JsonConvert.DeserializeObject(co);
foreach(result.data中的var项)
{
建议=新字符串[]{item.city};
}
}
捕获(例外情况除外)
{
dispatchermer.Stop();
抛出新异常(例如ToString());
}
}
私有字符串[]获取建议(字符串文本)
{
字符串[]结果=null;
结果=建议。其中(x=>x.StartsWith(text)).ToArray();
返回结果;
}
我的头发准备好了
class Autofill
{
public string city_id { get; set; }
public string city { get; set; }
}
class AutofillHelper
{
public List<Autofill> data { get; set; }
}
类自动填充
{
公共字符串city_id{get;set;}
公共字符串city{get;set;}
}
类AutofillHelper
{
公共列表数据{get;set;}
}
我希望它显示API的响应,供选择它的人使用。将引发运行时错误。有人能告诉我哪里出了问题吗
感谢您提供的任何帮助……为什么不先下载城市列表,然后在
AutoSuggestBox\u TextChanged
中使用您的查询语句更新ItemSource。它比总是为每个输入的字符点击API要好。城市列表太大,无法将其下载…如果城市列表很大,为什么不使用sqlite作为资源添加它呢。由于对每个文本的触发请求不可行,特别是在网络丢失是一个问题的2g网络中。而且“建议=新字符串[]{item.city};”它是否执行所需的功能。能否在“result=suggestions.Where(x=>x.StartsWith(text)).ToArray();”行上放置断点并检查建议的值是否有任何值。谢谢大家,我现在让它工作了,但现在的问题是“建议=新字符串[]{item.city};”替换数组中的上一个值我能做什么?