Monotouch / C # версия "stringWithContentsOfUrl" - PullRequest
1 голос
/ 22 марта 2010

Я пытаюсь преобразовать часть кода Objective C в C # для использования с Monotouch, и я понятия не имею, что использовать для замены stringWithContentsOfUrl Должен ли я использовать что-то вроде:

HttpWebRequest request = (HttpWebRequest) WebRequest.Create("http://www.helephant.com");
HttpWebResponse response = (HttpWebResponse) request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK &&
    response.ContentLength > 0){
    TextReader reader = new StreamReader(response.GetResponseStream());
    string text = reader.ReadToEnd();
    Console.Write(text);
}

Это безопасно в MonoTouch? Будет ли это работать на iPhone?

Ответы [ 2 ]

6 голосов
/ 27 марта 2010

Для быстрой работы вы можете использовать более простой WebClient.

Просто сделайте это:

var web = new System.Net.WebClient ();
var result = web.DownloadString ("http://www.google.com");

Существуют различные вспомогательные методы, такие как приведенные выше в WebClient, которые позволяют вам загружать необработанные данные или загружать прямо в файл.Кроме того, вы можете использовать «асинхронные» версии этих методов, чтобы данные загружались асинхронно и получать уведомление о завершении загрузки:

web.DownloadStringCompleted += delegate (object sender, DownloadStringCompletedEventArgs e){
   Console.WriteLine ("Got {0}", e.Result);
}
web.DownloadStringAsync ("http://www.google.com");

Если вы используете варианты асинхронного режима, помните, что вы не можете вызватьлюбые методы пользовательского интерфейса непосредственно как UIKit не являются инструментарием, который поддерживает доступ из нескольких потоков.Вы должны использовать NSObject.InvokeOnMainThread, чтобы гарантировать, что код, который вы вызываете, вызывается в правильном потоке:

web.DownloadStringCompleted += delegate (object sender, DownloadStringCompletedEventArgs e){
   label.InvokeOnMainThread (delegate { label.Text = e.Result; });
}
web.DownloadStringAsync ("http://www.google.com");
1 голос
/ 23 марта 2010

выглядит хорошо для меня.У меня есть какой-то код, который я недавно взломал для чего-то похожего, который прекрасно работает.

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create (tmpMPURL);
request.Method = "GET";

WebResponse response = request.GetResponse ();
StreamReader reader = new StreamReader (response.GetResponseStream (),Encoding.GetEncoding("iso-8859-1"));

string responseString = reader.ReadToEnd ();
reader.Close ();

XmlDocument xmlDoc = new XmlDocument ();
xmlDoc.LoadXml (responseString);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...