大叔也说Xamarin~Android篇~调用远程API接口,发POST请求

回到目录

Xamarin我们在上节已经教大家如何去部署它的环境了,今天来说一个实际的例子,使用android客户调用.net web api的一个接口,并发送POST请求,当服务端回到请求后做出响应,客户端android将响应的内容输出,并跳换到别一个Activity页面,在新视图上加载网页内容到webView控件上,整个流程结束!

一 在主页面上添加几个表单元素,账号,密码,登陆按钮,并在Activity类的OnCreate方法中为它们赋值,并添加按钮的click事件

复制代码
     protected override void OnCreate (Bundle savedInstanceState)
        {
            base.OnCreate (savedInstanceState);

            // Set our view from the "main" layout resource
            SetContentView (Resource.Layout.Main);
          
            // Get our button from the layout resource,
            // and attach an event to it
            Button button = FindViewById<Button> (Resource.Id.myButton);
            
            button.Click += delegate {
                button.Text = string.Format ("{0} clicks!", count++);
            };
            Android.Util.Log.Info ("normal", "日志zzl");
            var loginBtn = FindViewById<Button> (Resource.Id.loginBtn);
            var username = FindViewById<TextView> (Resource.Id.username);
            var password = FindViewById<TextView> (Resource.Id.password);
            var result = FindViewById<TextView> (Resource.Id.result);
            loginBtn.Click += delegate {

                string url = "http://api.xuexiba.com/v1/User/Login";
                //创建HttpClient(注意传入HttpClientHandler)
                using (var http = new HttpClient ()) {
                    var content = new FormUrlEncodedContent (new Dictionary<string, string> () { 
                        { "username",username.Text },
                        { "password",password.Text }
                        
                    });

                    var response = http.PostAsync (url, content);
                    result.Text = response.Result.Content.ReadAsStringAsync ().Result;
                 Intent intent = new Intent(this, typeof(ViewPageActivity));
                 StartActivity(intent);
 
                }
            };
        }
复制代码

二 在ViewPageActivity里添加一个webView用来显示网页的内容,如下代码

复制代码
    protected override void OnCreate (Bundle savedInstanceState)
        {
            base.OnCreate (savedInstanceState);
            SetContentView (Resource.Layout.ViewPage);
            var webView = FindViewById<WebView> (Resource.Id.webView);
            //启用Javascript Enable
            webView.Settings.JavaScriptEnabled = true;
            //载入网址
            webView.LoadUrl ("http://www.sina.com");
            //直接在当前webView上打开
             webView.SetWebViewClient (new CustWebViewClient ());

        }
复制代码

注意,代码webView.SetWebViewClient (new CustWebViewClient ())表示使用现有的webView加载网页内容,而如果不加这行,那么网页将使用系统自带的浏览器进行加载,

下载看一下CustWebViewClient 这个类的内容

 

复制代码
public class CustWebViewClient : WebViewClient
    {
        public override bool ShouldOverrideUrlLoading (WebView view, string url)
        {
            view.LoadUrl (url);
            return true;
        }

    }
复制代码

 

OK,在我们设计页面时,可以直接从工具箱上进行拖动,最后布局向这样

最后进行APK的生成,我们的程序包就算完成了!

 回到目录

posted @   张占岭  阅读(5927)  评论(1编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
历史上的今天:
2014-12-02 WebApi系列~实际项目中如何使用HttpClient向web api发异步Get和Post请求并且参数于具体实体类型
2012-12-02 爱上MVC3系列~无刷新验证码
2011-12-02 基础才是重中之重——对var的误会,对不起,我愿望(冤枉)你了
2011-12-02 基础才是重中之重——面向抽象编程(抽象类的多态性)
2011-12-02 基础才是重中之重——派生类集合与基类集合可以相互转换吗?
点击右上角即可分享
微信分享提示