Wie behandeln Daten von httpclient
Arbeite ich an einem neuen Windows Phone-8-app. Ich bin die Verbindung zu einem webservice, die gibt gültige json-Daten. Ich bin mit der longlistselector, um die Daten anzuzeigen. Dies funktioniert gut, wenn ich den json-string in GetAccountList(); aber beim Empfang von Daten aus dem data Services-Klasse, ich bin immer der Fehler "kann Nicht implizit konvertiert Typ 'System.Threading.Aufgaben.Aufgabe 'to string". Weiß nicht, was schief geht. Jede Hilfe ist willkommen. Danke!
DataServices.cs
public async static Task<string> GetRequest(string url)
{
HttpClient httpClient = new HttpClient();
await Task.Delay(250);
HttpResponseMessage response = await httpClient.GetAsync(url);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
Debug.WriteLine(responseBody);
return await Task.Run(() => responseBody);
}
AccountViewModel.cs
public static List<AccountModel> GetAccountList()
{
string json = DataService.GetRequest(url);
//string json = @"{'accounts': [{'id': 1,'created': '2013-10-03T16:17:13+0200','name': 'account1 - test'},{'id': 2,'created': '2013-10-03T16:18:08+0200','name': 'account2'},{'id': 3,'created': '2013-10-04T13:23:23+0200','name': 'account3'}]}";
List<AccountModel> accountList = new List<AccountModel>();
var deserialized = JsonConvert.DeserializeObject<IDictionary<string, JArray>>(json);
JArray recordList = deserialized["accounts"];
foreach (JObject record in recordList)
{
accountList.Add(new AccountModel(record["name"].ToString(), record["id"].ToString()));
}
return accountList;
}
UPDATE: ich änderte es leicht und funktioniert wie ein Charme jetzt. Vielen Dank für Ihre Hilfe!
DataServices.cs
//GET REQUEST
public async static Task<string> GetAsync(string url)
{
var httpClient = new HttpClient();
var response = await httpClient.GetAsync(url);
string content = await response.Content.ReadAsStringAsync();
return content;
}
AccountViewModel.cs
public async void LoadData()
{
this.Json = await DataService.GetAsync(url);
this.Accounts = GetAccounts(Json);
this.AccountList = GetAccountList(Accounts);
this.IsDataLoaded = true;
}
public static IList<AccountModel> GetAccounts(string json)
{
dynamic context = JObject.Parse(json);
JArray deserialized = (JArray)JsonConvert.DeserializeObject(context.results.ToString());
IList<AccountModel> accounts = deserialized.ToObject<IList<AccountModel>>();
return accounts;
}
public static List<AlphaKeyGroup<AccountModel>> GetAccountList(IList<AccountModel> Accounts)
{
List<AlphaKeyGroup<AccountModel>> accountList = AlphaKeyGroup<AccountModel>.CreateGroups(Accounts,
System.Threading.Thread.CurrentThread.CurrentUICulture,
(AccountModel s) => { return s.Name; }, true);
return accountList;
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Linie, dass ist Ihr problem:
Haben Sie es versucht? :
Versuchen Sie auch dies:
Hier ein paar Dinge. Zuerst wird der Fehler
Diese änderung erfordert das hinzufügen der
async
Tastatur, um Ihre MethodeDies ist das neue async - /await-Muster. Das hinzufügen dieser Wörter sagt dem compiler, dass die cal-Methode ist asynchron. Es ermöglicht Ihnen, um asynchrone Aufrufe, sondern code schreiben als ob es synchron ist.
Weitere Möglichkeiten zum aufrufen der Methode verwendet werden, um die Arbeit der Task-Objekt direkt.
Nun für die GetResult-Methode. Mithilfe der async/await-Muster erfordert, dass Sie zurückkehren Aufgabe aus Methoden. Auch wenn der Rückgabetyp Aufgabe sollte Ihr code return T. So wie Krekkon erwähnt, sollten Sie die Rücklaufleitung zu
Hier ist ein tolle Artikel über die Rückkehr Aufgabe von einer async-Methode.