MonoDroidプロジェクトでHttpClientクラスを使用しようとしていますが、System.Net.http名前空間のように見えますが無効です。
プロジェクトの参照をSystem.Net.http.dllに追加しようとしましたが、参照リストに表示されていないようです。
何か案が?
Thks
MonoDroidプロジェクトでHttpClientクラスを使用しようとしていますが、System.Net.http名前空間のように見えますが無効です。
プロジェクトの参照をSystem.Net.http.dllに追加しようとしましたが、参照リストに表示されていないようです。
何か案が?
Thks
HttpClientは.NET4.5クラスであり、MonoforAndroidではまだ利用できません。Mono自体はバージョン3.0でサポートが追加されましたが、MonoforAndroidは引き続きMono2.10に基づいています。XamarinがMonoforAndroid(およびMonoTouch)のMono 3.0への更新に取り組んでいることは知っていますが、私が知る限り、リリース日はまだ設定されていません。
古いスレッドであることは知っていますが、XamarinがついにXamarin.Android 4.8System.Net.Http
で提供されたのを見たので、それをあなたと共有することも考えました。
ありがとう。
HttpClient
(まだ!)使用することはできませんが、System.Net.HttpWebRequest
オブジェクトを使用することはできます。オブジェクトは、便利なラッパーを提供できることを実際に実行しますHttpClient
(特に、Web APIコントローラーを起動する場合)。
これが私が取り組んでいる現在のプロジェクトからのサンプルです(NewtonSoft.Json
標準ではなく、のモノドロイドポートを使用しています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);
}
...私がヒットしているWebAPIコントローラーは、任意の処理を実行し、送信したオブジェクトを保存してから、説明を微調整して、機能することを確認します。次に、微調整されたオブジェクトを送り返します...
そして、コールバック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パターンを使用します、しかしあなたが何かをする必要があるだけならそれは働きます。