2016-04-01 20 views
1

AndroidのonClickイベントで呼び出されるansyncメソッドがあります。 このメソッドでは、いくつかのチェックが行われ、検索メソッドがawaitで呼び出され、検索クエリが送信され、応答が取得されます。メソッドで適切な値を返すことができません

検索メソッドが初めて呼び出されるときだけ、プログラムはメソッドから適切な戻り値を取得します。 2番目のif-blockでsearch-methodを使用しようとすると、search-methodはnullを返します。

正しいレスポンスを受信したかどうかを検索方法でチェックし、正しいレスポンが検索方法で受信されたため、問題が戻り部分にあるように見えます。むしろ1を共有するよりも "SEARCHQUERY" の

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); 
+0

私が知る限り、コードは大丈夫です。 'token'がまだ有効かどうかチェックしましたか? 'searchQuery'が実際に結果を返すことは確かですか? – Nitram

+0

はい私はそれが何らかの結果をもたらし、 'token'がまだ有効であることを再度確認しました。私は100%デバッグモードで正しい結果が得られることを確認できます。 私は、最初の 'if'ブロックの内容をコメントするときに適切な結果が得られるので、私は2つの使用を待っていると思います。 – fbueckle

+1

ちょうど推測ですが、 "searchQuery"のインスタンスを共有するのではなく、別のインスタンスを使用してみてください。 –

答えて

1

使用異なるインスタンス:

私のコードは次のようになります。

関連する問題