xus
xus

Reputation: 2607

Is it possible to use the HttpClient class in MonoDroid?

I'm trying to use the HttpClient class on a MonoDroid project but it looks like the System.Net.http namespace it's not valid.

I try to add a reference in the project to System.Net.http.dll but it doesn't seem to be available in the references list.

Any idea?

Thks

enter image description here

Upvotes: 2

Views: 2300

Answers (3)

wislon
wislon

Reputation: 733

You can't use HttpClient (yet!), but you can still use the System.Net.HttpWebRequest object, which does actually do what HttpClient can provide convenient wrappers for (especially when hitting up a Web API controller).

Here's a sample from a current project I'm working on (it's using the monodroid port of NewtonSoft.Json, not the standard 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);
    }

...the Web API controller I'm hitting does something arbitrary, saves the object I just sent, and then tweaks the description so I know it works. Then it sends the tweaked object back...

And then the callback ProcessJsonResponseForSingleResult looks like

    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));
        }

    }

Yeah, I know, it uses the BeginAsync/EndAsync pattern which I don't like any more either, but it does work if you just need to get something done.

Upvotes: 1

Ahmed Salman Tahir
Ahmed Salman Tahir

Reputation: 1779

I know it is an old thread but I just saw that Xamarin has finally given System.Net.Http in Xamarin.Android 4.8, so thought to share it with you too.

Thanks.

Upvotes: 2

Greg Shackles
Greg Shackles

Reputation: 10139

HttpClient is a .NET 4.5 class, which is not available yet in Mono for Android. Mono itself added supported for it in version 3.0, but Mono for Android is still based on Mono 2.10. I know Xamarin is working on updating Mono for Android (and MonoTouch) to Mono 3.0 now, but as far as I know there's no release date set yet.

Upvotes: 4

Related Questions