话不多说直接贴代码,有问题可留言!
主方法调用接口
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; }
}