UWP中使用autosuggestbox的无限循环或无限递归错误

时间:2017-05-24 10:30:12

标签: c# windows xaml uwp

//搜索查询的类

   public class SearchQueries  
    {
        List<data> list = new List<data>();  
        string response;  

 // The method that return the list after it is set

        public List<data> GetData()  
        {
            return list;  
        }

//从Google API服务进行搜索的方法

        public async void SetData()
        {

//问题从这里开始,当我在其他类中实例化此类中的搜索类以获取我的查询的autosuggestbox中的文本值时,每当我尝试启动页面时它都会崩溃。每当我提供地址默认数据时它都能正常工作,例如字符串地址=“伦敦”,当我启动它时页面打开,并在我输入autosuggestbox时给我伦敦相关结果。

            Search search = new Search();

            string address = search.Address;

            list.Clear();

//请注意我使用的教程是从本地文件夹获取数据,但我正试图从Google API获取数据

            string dataUri = "https://maps.googleapis.com/maps/api/place/autocomplete/json?key=AIzaSyDBazIiBn2tTmqcSpkH65Xq5doTSuOo22A&input=" + address;
            string Api = System.Uri.EscapeDataString(dataUri);
            HttpClient client = new HttpClient();
            client.Timeout = TimeSpan.FromMilliseconds(1000);
            try
            {

                response = await client.GetStringAsync(Api);




            for (uint i = 0; i < jsonarray.Count; i++)
            {

                string json_string_object = jsonarray.GetObjectAt(i)["description"].ToString();


                list.Add(new data() { name = json_string_object });
            }
            }
            catch (TimeoutException e)
            {
                ContentDialog myDlg = new ContentDialog()
                {
                    PrimaryButtonText = "OK"
                };

                myDlg.Content = e.ToString();
            }
        }

//获取匹配数据的方法

        public IEnumerable<data> getmatchingCustomer(string query)
        {
            return list.Where(c => c.name.IndexOf(query, StringComparison.CurrentCultureIgnoreCase) > -1).OrderByDescending(c => c.name.StartsWith(query, StringComparison.CurrentCultureIgnoreCase));

        }

// constructor for returning the SetData() method

        public SearchQueries()
        {
// It points to this method whenever the application crash, with the notification of infinite loop or infinite recursion

            SetData();
        }
    }

//页面的主要类

public sealed partial class Search : Page
{
 public string theaddress { get; set; }
 SearchQueriess queries = new SearchQueriess();

 public Search()
    {
        this.InitializeComponent();
        myMap.Loaded += MyMap_Loaded;
        theaddress = locationAddress.Text;
}

//自动提示框的文本更改方法。

private async void AutoSuggestBox_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args)
        {
            if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInput)
            {
                if (sender.Text.Length > 1)
                {

                    var marchingData = queries.getmatchingCustomer(sender.Text);
                    sender.ItemsSource = marchingData.ToList();

                }
                else
                {
                                            sender.ItemsSource = new string[] { "No suggestion...." };
                }
            }
        }
}

0 个答案:

没有答案