当前位置: 首页 > news >正文

android-实例-网络互交-post get请求(依赖okhttp)

我的实例(仅供参考)

配置

配置1-权限

在AndroidManifest.xml中配置

<uses-permission android:name="android.permission.INTERNET" />

配置2-下载关联相关包插件(记得同步更新操作)

implementation 'com.squareup.okhttp3:okhttp:3.5.0' implementation 'com.squareup.okio:okio:1.11.0' implementation 'com.google.code.gson:gson:2.9.0'

在工程下新建文件夹network(新建类)

HttpClient.java类

import okhttp3.OkHttpClient; public class HttpClient { private OkHttpClient client;//网络请求对象 /** * 私有的构造器 在HttpClient实例化后 创建OkHttpClient对象 * 用于网络的请求 */ private HttpClient(){ client = new OkHttpClient.Builder() .writeTimeout(80, TimeUnit.SECONDS) .connectTimeout(80,TimeUnit.SECONDS) .readTimeout(80,TimeUnit.SECONDS) .build(); } private static class SingleTon{ public static final HttpClient INSTANCE = new HttpClient(); } /** * 获取单例 * @return */ public static HttpClient getInstance(){ return SingleTon.INSTANCE; } /** * 获取OkHttpClient * @return */ public OkHttpClient getClient() { return client; } }

HttpCode.java类(实例中几乎没有用,以后备用)

public class HttpCode { public static final String FAILURE = "失败"; public static final String SUCCESS= "成功"; public static final int ERROR = 0;//错误 public static final int HOME = 1;//请求首页的数据 public static final int DETAILS = 2;//请求详情的数据 public static final int SHOP_TYPE = 3;//请求首页推荐分类的数据 public static final int SHOP_LIST = 4;//请求分类商品的数据 public static final int TYPE_NAME = 5;//请求分类列表的数据 public static final int START_PAGE = 1;//起始页数 public static final int RANDOM_PAGE = 3;//随机页数 public static final int PAGE_ROW = 10;//数据条数 public static final String ROW = "row";//请求参数row public static final String PAGE = "page";//请求参数page public static final int DOWN_REFRESH = 101;//刷新 public static final int DOWN_INIT = 102;//初始化界线 public static final int DOWN_MORE = 103;//加载更多 public static final int LOGIN=701; //请求登录 public static final int SYNC_ASMPLE = 1; public static final int SYNC_REGION = 2; public static final int SYNC_ORG = 3; }
HttpUtils.java(实用工具类) 本工具就连2方法(post 和get),尽量压缩程序,理解简单。
import android.annotation.SuppressLint; import android.content.Context; import android.os.Handler; import android.util.Log; import java.io.IOException; import java.util.Iterator; import java.util.Map; import okhttp3.Call; import okhttp3.Callback; import okhttp3.FormBody; import okhttp3.MediaType; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; public class HttpUtils { /*POST请求网络数据*/ //=============================================================== /*登录URL: http://101.43.53.57.62248/login2 Content-Type:application/json-patch+json 请求参数(Body JSON) { "username": "fengxian", "password": "123456", "clientId": "Rx-BnCSr2eUHCwR" }*/ public static void HttpPost_LoginAndGetToken(final Handler handler, final int requestCode) { String target = "http://101.43.53.57:62248/login2"; //登录请求 同时获取token码 String username = "fengxian"; String password = "123456"; String clientId = "Rx-BnCSr2eUHCwR"; String jsonBody = String.format("{\"username\":\"%s\",\"password\":\"%s\",\"clientId\":\"%s\"}", username, password, clientId); RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), jsonBody); //获取一个请求对象 Request request = new Request.Builder().url(target).post(body).addHeader("Content-Type", "application/json").build(); HttpClient.getInstance().getClient().newCall(request).enqueue(new Callback() { //请求失败时的回调方法 @Override public void onFailure(Call call, IOException e) { //将错误结果发送给Handler对象,然后由handleMessage()方法处理 Log.e("HttpUtils-HttpPost", "onFailure: 登录-请求Post失败"); handler.obtainMessage(requestCode, e.getMessage()).sendToTarget(); } //请求成功时的回调方法 @Override public void onResponse(Call call, Response response) throws IOException { //将获取的结果发送给Handler对象,然后由handleMessage()方法处理 Log.e("HttpUtils-HttpPost", "onResponse: 登录-请求Post成功"); //Log.e("HttpUtils-HttpPost", "onResponse: "+response.body().string()); handler.obtainMessage(requestCode, response.body().string()).sendToTarget(); } }); } //=============================================================== /** * Get请求网络数据 */ public static void HttpGet_GetItemCurveList(final Handler handler, final int requestCode,final String token ){ /* //拉取曲线数据 登录URL: http://101.43.53.57.62248/ar/curve/mylistall Method:GET 是否鉴权:是(Bearer Token)权限标识:ar:curve:all:list:isused (⽆权限会返回403 并携带 token ="123456789....."; */ String target ="http://101.43.53.57:62248/ar/curve/mylistall"; final Request request = new Request.Builder() .url(target) .addHeader("Authorization", "Bearer " + token) .addHeader("Content-Type", "application/json") .get() .build(); //获取一个请求对象 HttpClient.getInstance().getClient().newCall(request).enqueue(new Callback() { @SuppressLint("LongLogTag") @Override public void onFailure(Call call, IOException e) { //请求失败时的回调方法 //将错误结果发送给Handler对象,然后由handleMessage()方法处理 Log.e("mytest1_HttpUtils-HttpGet", "onFailure: 请求失败"); handler.obtainMessage(HttpCode.ERROR,e.getMessage()).sendToTarget(); } @SuppressLint("LongLogTag") @Override public void onResponse(Call call, Response response) throws IOException { //请求成功时的回调方法 //将获取的结果发送给Handler对象,然后由handleMessage()方法处理 Log.e("mytest1_HttpUtils-HttpGet", "onFailure: 请求成功"); handler.obtainMessage(requestCode,response.body().string()).sendToTarget(); } }); } //=============================================================== }

最初需求1-POST(共2个)

程序直接调用HttpUtils类中的HttpPost_LoginAndGetToken方法完成

建议在跳出对话框+线程中使用post请求

HttpUtils.HttpPost_LoginAndGetToken(handler,HANDLER_CODE_HTTP_LOGIN_AND_GETTOKEN); //HANDLER_CODE_HTTP_LOGIN_AND_GETTOKEN 为 handler接收码(自定义)

最终请求的数据在handler中接收处理

private Handler handler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { switch (msg.what){ case HANDLER_CODE_HTTP_LOGIN_AND_GETTOKEN: { //okhttp3登录请求 同时获取token码 ok //接收HttpUtils.HttpPost_LoginAndGetToken()返回的结果 String jsonStr = (String)msg.obj; if( jsonStr.contains("ok") || jsonStr.contains("success")){ Log.e(TAG, "handleMessage: 登录请求 返回结果--成功"); Gson gson = new Gson(); BeanToken beanToken = gson.fromJson(jsonStr,BeanToken.class); token1 = beanToken.getData(); Log.e(TAG, "handleMessage: token1 = " + token1); } else{Log.e(TAG, "handleMessage: 登录请求 返回结果--失败");} break; } //=================================================== default:break; } return false; } });

最后获取token码

最初需求2-GET 带token码的请求(共2个)

程序直接调用HttpUtils类中的HttpPost_LoginAndGetToken方法完成

建议在跳出对话框+线程中使用Get请求

HttpUtils.HttpGet_GetItemCurveList(handler, HANDLER_CODE_HTTP_GET_ITEM_CURVE_LIST, token1); //token1参数为需求1-POST所获取//HANDLER_CODE_HTTP_GET_ITEM_CURVE_LIST 为 handler接收码(自定义)

最终请求的数据在handler中接收处理,参考最初需求1-POST

持续更新

http://www.jsqmd.com/news/471606/

相关文章:

  • 【2026-03-07】连岳摘抄
  • 电科金仓MySQL迁移实战:一个技术专家的深度踩坑与突围笔记
  • 常用功能代码笔记
  • 公司都用神电脑监控软件?分享七款好用的电脑监控软件,2026最新精选
  • anaconda3 2023.09-0 安装教程(新手向)
  • 深入解析 Java 代理:从静态代理到 CGLIB,掌握 AOP 底层核心
  • Protocol Launcher 系列:Kaleidoscope 优雅的代码比对与合并
  • __try / __except 和 __try / __finally 用法(五)
  • 鸿蒙中 memory://协议
  • PHP编写对账脚本:立即开发一个每分钟运行的 PHP 脚本,比对活跃商品的 DB 和 Redis 库存。
  • MYSQL中锁的分类与加锁方式小结
  • 鸿蒙开发工程师:构建未来智能生态的基石——技术解析、能力要求与面试指南
  • 2026年伽玛能谱仪采购必看:这些知名企业的产品值得关注 - 品牌推荐大师1
  • Linux驱动SPI-3-注册流程spi4
  • 势能法求解含齿根裂纹的直齿轮时变啮合刚度,根据万志国和梁新辉文献并结合其它文献采用MATLAB...
  • 高性能后台服务分级优化--百万级IO、千万级内存、亿级CPU的递进式优化思路
  • HarmonyOS开发指南:从入门到精通——聚焦APP、游戏与PC应用
  • 告别“塑料二次元”: 2D 角色 PBR 材质化与光追重构工作流
  • 换道轨迹预测:用LSTM模型捕捉车辆的“思考“过程
  • 复试第十一天
  • 【C++】lock_guard 与 unique_lock
  • 别再用串口屏蹲车间了!WPF .NET 8上位机实战:自定义仪表盘+LiveCharts2趋势图+SignalR远程运维,附6个工业级踩坑指南
  • 支付宝立减金回收黑科技!不用消费也能把钱揣进口袋 - 可可收
  • 基于ATP仿真建模的35kV与110kV变压器PT谐振过电压问题研究
  • PHP的多个账号使用同一手机号,收货地址怎么同步?
  • LabVIEW打造超酷液压泵试验台程序:功能全解析
  • 分析2026年江苏口碑不错的液氧、高纯氮、标准气工业气体厂家 - 工业品网
  • 做了8年工业上位机,我开源了这套通用框架!多设备/多协议10分钟快速对接,开箱可商用
  • 电网同步这事儿听着玄乎,其实就像给三相交流电装个节拍器。传统锁相环遇到电压波动就哆嗦,今天咱们聊点硬核的——怎么用d轴电压归一化让这个节拍器稳如老狗
  • 拒绝“实景贴皮感”:2D 角色摄影级实景融合与动态投射工作流