C# 在windows 8.1手机应用程序中使用REST 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

我正在实现一个城市搜索,因此我希望自动填充功能,当我选择一个城市时,我希望将ID发送回API。以填充其他一些字段

 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};”替换数组中的上一个值我能做什么?