我想在MonoDroid項目上使用HttpClient類,但它看起來像System.Net.http命名空間它是無效的。是否有可能在MonoDroid中使用HttpClient類?
我嘗試在項目中添加一個引用到System.Net.http.dll,但它似乎沒有在引用列表中可用。
有什麼想法?
THKS
我想在MonoDroid項目上使用HttpClient類,但它看起來像System.Net.http命名空間它是無效的。是否有可能在MonoDroid中使用HttpClient類?
我嘗試在項目中添加一個引用到System.Net.http.dll,但它似乎沒有在引用列表中可用。
有什麼想法?
THKS
你不能使用HttpClient
(還!),但你仍然可以使用System.Net.HttpWebRequest
對象,它實際上做HttpClient
可以提供方便的包裝(特別是當擊中Web API控制器時)。
下面是從當前項目的樣本我的工作(它使用的NewtonSoft.Json
的MonoDroid的端口,而不是標準System.Runtime.Serialization.Json
):
private void AddARecord()
{
var cartesian = new Cartesian()
{
Description = "next item blah",
X = 5,
Y = 10,
Z = 15,
};
string json = JsonConvert.SerializeObject(cartesian);
var request = new HttpWebRequest(new Uri(_url)) {ContentType = "application/json", Method = "POST"};
var sw = new StreamWriter(request.GetRequestStream(), System.Text.Encoding.ASCII);
sw.Write(json);
sw.Close();
request.BeginGetResponse(ProcessJsonResponseForSingleResult, request);
}
...在Web API控制器我打不一些隨意的東西,保存我剛剛發送的對象,然後調整描述,以便我知道它的工作原理。然後將其發送微調的對象回來...
然後回調ProcessJsonResponseForSingleResult
看起來像
private void ProcessJsonResponseForSingleResult(IAsyncResult ar)
{
var request = (HttpWebRequest)ar.AsyncState;
var response = request.EndGetResponse(ar);
using (var outputStream = new StreamReader(response.GetResponseStream(), System.Text.Encoding.ASCII))
{
var jsonString = outputStream.ReadToEnd();
Log.Info("PJRFSR", string.Format("JSON string: {0} - deserialising...", jsonString));
var cartesian = JsonConvert.DeserializeObject<Cartesian>(jsonString);
RunOnUiThread(() => UpdateUiTextView(cartesian.Description));
}
}
是的,我知道,它使用了我不喜歡任何更多要麼BeginAsync/EndAsync模式,但如果你只是需要完成某件事情,它確實有效。
HttpClient的是一個.NET 4.5類,這是目前無法在單爲Android。 Mono本身在3.0版本中支持它,但Mono for Android仍然基於Mono 2.10。我知道Xamarin現在正在將Mono for Android(和MonoTouch)更新到Mono 3.0,但據我所知,目前還沒有發佈日期。
我知道這是一個古老的線程,但我剛剛看到Xamarin終於在Xamarin.Android 4.8中給出了System.Net.Http
,所以想過與你分享。
謝謝。
感謝您的信息Greg – xus