第二个等待在方法

时间:2016-04-01 09:08:04

标签: c# android asynchronous xamarin async-await

我有一个在Android中的onClick-Event上调用的ansync方法。 在该方法中,进行一些检查,然后使用await调用search-method,该方法发送searchquery并获得响应。

Unfortunatley只在第一次调用search-method时程序从方法中获得正确的返回。如果我尝试在第二个if块中使用search-method,则search-method返回null。

我在搜索方法中检查了它是否收到了正确的响应,问题似乎出现在返回部分,因为在搜索方法中收到了正确的响应。

我的代码如下所示:

private async void CreateSearchQuery(object sender, EventArgs e)
    {
        SearchQuery searchQuery = new SearchQuery();

        if (spinnerPosition == FIBU)
        {
            searchQuery.doctype = "Fibu Rechnungen";
            searchQuery.query   = new Dictionary<string, string>();
            searchQuery.query.Add("belegnr", belegnummer.Text);

            prefs = PreferenceManager.GetDefaultSharedPreferences(this);
            var token = prefs.GetString("token", "");

            ProgressDialog progress = new ProgressDialog(this);
            progress.Indeterminate  = true;
            progress.SetProgressStyle(ProgressDialogStyle.Spinner);
            progress.SetMessage("Suche nach Daten....");
            progress.SetCancelable(false);
            progress.Show();

            JArray searchresult = await SearchQuery.SendSearchQuery(searchQuery, token);
            progress.Cancel();

            FibuDocument[] documents    = searchresult.ToObject<FibuDocument[]>();
            var intent                  = new Intent(this, typeof(SearchFibuDetailsActivity));
            var json                    = JsonConvert.SerializeObject(documents);

            ISharedPreferencesEditor editor = prefs.Edit();
            editor.PutString("searchQuery", json);
            editor.Apply();       

            StartActivity(intent);                
        }

        if (spinnerPosition == AUFTRAGSBELEGE)
        {
            searchQuery.doctype = "Auftragsbelege";
            searchQuery.query = new Dictionary<string, string>();

            if(auftragsnummer.Text != "")
            {
                searchQuery.query.Add("auftragsnr", auftragsnummer.Text);
            }
            if(gstKode.Text != "")
            {
                searchQuery.query.Add("gst", gstKode.Text);
            }
            if(trackTrace.Text != "")
            {
                searchQuery.query.Add("sttnr", trackTrace.Text);
            }

            prefs = PreferenceManager.GetDefaultSharedPreferences(this);
            var token = prefs.GetString("token", "");

            ProgressDialog progress = new ProgressDialog(this);
            progress.Indeterminate = true;
            progress.SetProgressStyle(ProgressDialogStyle.Spinner);
            progress.SetMessage("Suche nach Daten....");
            progress.SetCancelable(false);
            progress.Show();

            JArray searchresult = await SearchQuery.SendSearchQuery(searchQuery, token);
            progress.Cancel();

            Document[] documents = searchresult.ToObject<Document[]>();

            var json = JsonConvert.SerializeObject(documents);

1 个答案:

答案 0 :(得分:1)

使用&#34; searchQuery&#34;的不同实例而不是分享一个。