首先在build.gradle下的dependencies下添加引用。

implementation "com.squareup.okhttp3:okhttp:4.9.0"

然后编写HttpHelper的Get和Post方法。

public class HttpHelper {
public static final OkHttpClient client = new OkHttpClient();

public static void get(String url, ICallback_Comm callback) throws IOException {
new Thread(){
@Override
public void run(){
Request request = new Request.Builder()
.url(url)
.build();

try (Response response = client.newCall(request).execute()) {
String result = response.body().string();
callback.Call(result);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}.start();

}
//public static final MediaType JSON = MediaType.get("application/json; charset=utf-8");
public static final MediaType mediaType = MediaType.get("application/octet-stream; charset=utf-8");
public static void post(String url, String param, ICallback_Comm callback) throws IOException {
new Thread(){
@Override
public void run(){
RequestBody body = RequestBody.create(mediaType, param);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();

try (Response response = client.newCall(request).execute()) {
String result = response.body().string();
callback.Call(result);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}.start();

}
}

这里Post的MediaType设置成了application/octet-stream,因为我提交的数据是普通字符串,如果需要提交Json,则可设置为application/json。

使用HttpHelper模拟登陆。

Get:

 HttpHelper.get(AppConfig.WebApiCommUrl+"?para="+URLEncoder.encode("{\"LoginName\":\"admin\",\"Password\":\"admin\"}"),con->{ }); 

Post:

  HttpHelper.post(AppConfig.WebApiCommUrl,URLEncoder.encode("{\"LoginName\":\"admin\",\"Password\":\"admin\"}"),  con->{
LoginCommandResult baseResult = JsonHelper.Deserialize(LoginCommandResult.class ,con);
if(baseResult.IsSuccess){
}
else {
runOnUiThread(()->{
ShowMessage("登录失败,"+baseResult.Message);
});
}
runOnUiThread(()->{
loginButton.setEnabled(true);
loadingProgressBar.setVisibility(View.GONE);
});
});

PS1:Android中不能在子线程中来刷新UI线程。可以使用runOnUiThread切换回UI线程,然后控制UI。

 runOnUiThread(()->{
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
});

PS1:Alt+Insert会弹出自动生成菜单,选择Getter and Setter可以自动将字段生成属性,即生成get和set的属性函数。

PS3://region和//endregion组合可以折叠代码,类似C#的#region和#endregion。

PS4:获取集合长度,java里用size函数,比如If(list.size()>0),取第一个元素用get(index)方法,如list.get(0)。

----------------------------------------------------------------------------------------------------

注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!
若您觉得这篇文章还不错,请点击下方的【推荐】,非常感谢!

最新文章

  1. PHP 高级编程(5/5) - SPL 数组重载
  2. Linux下使用vsftp
  3. FZU 2105 Digits Count(位数计算)
  4. [中文版] 可视化 CSS References 文档
  5. 移动大数据时代最IN编程语言必读书单
  6. Scan IP relocate/failover其它段后不能ping通过
  7. Android简易实战教程--第十话《模仿腾讯手机助手小火箭发射详解》
  8. HTTP长连接和短连接 + Websocket
  9. node爬取html乱码
  10. 汉化DevExpress
  11. is和 == 的区别以及编码.解码
  12. 提取ipa里面的资源图片
  13. MapReduce的几个实现
  14. 图的最小生成树的理解和实现:Prim和Kruskal算法
  15. 基于Github搭建SrpingCloudConfig详解
  16. SSH服务登陆验证
  17. 每隔10秒自动更新svn 定时更新svn 脚本
  18. NDK版本 下载地址
  19. jsp的组成和执行过程
  20. 黑帽seo基础手法之快照劫持

热门文章

  1. SpringAOP-动态代理,日志注入
  2. PHP垃圾回收机制的一些浅薄理解
  3. Shell系列(9)- 用户自定义变量(2)
  4. YbtOJ-大收藏家【分层图,最大流】
  5. 揭秘:懂Python的测试员薪资到底有多高?
  6. Docker-Java限制cpu和内存及浅析源码解决docker磁盘挂载失效问题
  7. VUE -input输入框字母转大写
  8. nginx访问权限问题
  9. 数值分析:幂迭代和PageRank算法
  10. ThreadLocal概念以及使用场景