Xarmin HttpClient通信Get/POst请求,异步处理!

话不多说直接贴代码,有问题可留言!

主方法调用接口

     private void UserLogin()
        {

            INetHttpClient client = DefaultNetHttpClient.Instance;
            MemberLoginRequest request = new MemberLoginRequest()

           request.Uri = AppVarManager.LoginUri;

            request.Account = mEtPhone.Text;
            request.Pwd = mEtPassword.Text;

          //异步调用
            client.GetAsync<MemberLoginReponse>(request,res=> {

           //Hnanlder机制
                Message message = new Message();
                message.What = 0;
                message.Obj = res.Data;
                mHanlder.SendMessage(message);
            });
            
           
        }

回掉处理消息

  public class MyHandler : Handler
        {
            Activity mconext;
            public MyHandler(Activity context) {
                this.mconext = context;
            }
            public override void HandleMessage(Message msg)
            {
                base.HandleMessage(msg);
                switch (msg.What)
                {
                    case 0:
                        if (msg.Obj == null)
                        {
                            Toast.MakeText(mconext, "网络异常", ToastLength.Short).Show();
                            return;
                        }
                        MemberLoginReponse res=  msg.Obj.ToString().ToObject<MemberLoginReponse>();
                        if (res.ErrorCode.Equals("0") && !res.IsError)
                        {
                            string phone = res.Member.phone;
                            DefaultNetHttpClient.Token = res.Token;
                            DefaultNetHttpClient.Version = "2";
                            Intent intent = new Intent(mconext, typeof(HomeageActivity));
                            mconext.StartActivity(intent);
                            Toast.MakeText(mconext, "登录成功", ToastLength.Short).Show();
                        }
                        else {
                            Toast.MakeText(mconext, res.ErrorMessage, ToastLength.Short).Show();
                        }
                        break;
                }
            }
        }

public  interface INetHttpClient
    {

        /// <summary>
        /// get 回调方式
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="request"></param>
        /// <param name="act"></param>
        void GetAsync<T>(RequestMessage request, Action<T> act) where T : ResponseMessage,new();
        /// <summary>
        /// pos 回调方式
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="request"></param>
        /// <param name="act"></param>
        void PostAsync<T>(RequestMessage request, Action<T> act) where T :ResponseMessage,new();
    }

public class DefaultNetHttpClient : INetHttpClient{

        //单例
        public static INetHttpClient Instance = new Lazy<INetHttpClient>(() => new DefaultNetHttpClient()).Value;

  /// <summary>
        /// get 回调方式
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="request"></param>
        /// <param name="act"></param>
        public void GetAsync<T>(RequestMessage request, Action<T> act) where T : ResponseMessage,new()
        {
            T t = null;
            try
            {
                HttpClient client = GetHttpClient();
                DateTime time = DateTime.Now;


                string uri = AppVarManager.ApiServer + request.Uri;
                List<KeyValuePair<string, string>> nv = request.GetParas();
                //组合请求参数
                StringBuilder sb = new StringBuilder();
                foreach (var dict in nv)
                {
                    sb.Append("&" + dict.Key + "=" + dict.Value);
                }
                string para = sb.ToString().Remove(0, 1);
                uri += "?" + para;
                Task<HttpResponseMessage> trs = client.GetAsync(uri);
                trs.ContinueWith(tr =>
                {
                    string result = tr.Result.Content.ReadAsStringAsync().Result;
                    JsonValue resJosn = JsonValue.Parse(result);
                    string data = resJosn["Data"].ToString();
                    t = JsonConvert.DeserializeObject<T>(data);
                    t.Data = data;
                    act(t);
                },TaskContinuationOptions.OnlyOnRanToCompletion);
            }
            catch (Exception ex)
            {
                if (t == null)
                    t = new T();
                t.IsError = true;
                t.ErrorMessage = ex.Message;
                act(t);
            }
           
        }
        /// <summary>
        /// pos 回调方式
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="request"></param>
        /// <param name="act"></param>
        public void PostAsync<T>(RequestMessage request, Action<T> act) where T : ResponseMessage,new()
        {
            T t = null;
            try
            {
                HttpClient client = GetHttpClient();
                DateTime time = DateTime.Now;
                string uri = AppVarManager.ApiServer + request.Uri;
                List<KeyValuePair<string, string>> nv = request.GetParas();
                var content = new FormUrlEncodedContent(nv);
                Task<HttpResponseMessage> trs = client.PostAsync(uri, content);
                
                trs.ContinueWith(tr =>
                {
                    string result = tr.Result.Content.ReadAsStringAsync().Result;
                    JsonValue resJosn = JsonValue.Parse(result);
                    string data = resJosn["Data"].ToString();
                    t = JsonConvert.DeserializeObject<T>(data);
                    t.Data = data;
                    act(t);
                },TaskContinuationOptions.OnlyOnRanToCompletion);
            }
            catch (Exception ex)
            {
                if (t == null)
                    t = new T();
                t.IsError = true;
                t.ErrorMessage = ex.Message;
                act(t);
            }
        }

}


//建模

   public class MemberLoginRequest:RequestMessage
    {
        
        public string Account { get; set; }
        
        public string Pwd { get; set; }
        /// <summary>
        /// 设备编号
        /// </summary>
        public string DeviceToken { get; set; }
        /// <summary>
        /// 验证码
        /// </summary>
        public string VerifyCode { get; set; }
    }

猜你喜欢

转载自blog.csdn.net/qq_30423365/article/details/72469694