2013-03-03 27 views
5

tôi sử dụng WebClient để lấy dữ liệu của Yahoo dành cho Windows Phone 8 và Android HttpClient Với ​​WebClient tôi có thể làmWebClient thay thế cho windows 8?

WebClient client = new WebClient(); 
    client.DownloadStringCompleted += new  DownloadStringCompletedEventHandler(client_DownloadStringCompleted); 
    client.DownloadStringAsync(url); 

sau khi gửi sự kiện;

StringReader stream = new StringReader(e.Result) 

    XmlReader reader = XmlReader.Create(stream); 
    reader.ReadToFollowing("yweather:atmosphere"); 
    string humidty = reader.MoveToAttribute("humidity"); 

nhưng trong Windows 8 RT thì không có thứ gì như vậy.

làm cách nào tôi có thể tìm nạp dữ liệu sau? >http://weather.yahooapis.com/forecastrss?w=2343732&u=c

+0

Bạn đã xem 'HttpClient' chưa? –

Trả lời

8

Bạn có thể sử dụng HttpClient lớp, một cái gì đó như thế này:

public async static Task<string> GetHttpResponse(string url) 
{ 
    var request = new HttpRequestMessage(HttpMethod.Get, url); 
    request.Headers.Add("UserAgent", "Windows 8 app client"); 

    var client = new HttpClient(); 
    var response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead); 

    if (response.IsSuccessStatusCode) 
     return await response.Content.ReadAsStringAsync(); 
    else 
    throw new Exception("Error connecting to " + url +" ! Status: " + response.StatusCode); 
} 

phiên bản đơn giản sẽ chỉ:

public async static Task<string> GetHttpResponse(string url) 
{ 
    var client = new HttpClient(); 
    return await client.GetStringAsync(url); 
} 

Nhưng nếu http lỗi xảy ra GetStringAsync sẽ ném HttpResponseException, và như xa tôi có thể thấy không có trạng thái http nào được chỉ ra ngoại trừ trong thông báo ngoại lệ.

UPDATE: Tôi không nhận thấy rằng bạn trên thực tế bạn đang cố gắng để đọc RSS Feed, bạn không cần phải HttpClient và phân tích cú pháp XML, chỉ cần sử dụng lớp SyndicationFeed, đây là ví dụ:

http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh452994.aspx

+0

Hoặc sử dụng 'await client.GetStringASync' ... không cần phải tự kiểm tra mã trạng thái. –

+0

Tôi đoán rằng GetStringASync sẽ ném ngoại lệ nếu không thành công (WebException)? Không có gì trong tài liệu MSDN về điều đó –

+0

Vâng, nhiệm vụ trả về bởi GetStringAsync sẽ bị lỗi. Tôi đồng ý nó nên được tài liệu tốt hơn. –