安卓 原生okhttp使用get与post获取网络数据

网址

https://square.github.io/okhttp/

配置

依赖

在module的build.gradle中:

    implementation 'com.squareup.okhttp3:okhttp:3.14.7'implementation 'com.squareup.okio:okio:1.17.5'

AndroidManifest.xml

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

xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".test.TestOKHttpActivity"><Buttonandroid:id="@+id/btn_get_post"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="get和post" /><TextViewandroid:id="@+id/tv_result"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="xx"android:textSize="15sp"/>
</LinearLayout>

java代码

public class TestOKHttpActivity extends AppCompatActivity implements View.OnClickListener {private Button btn_get_post;private TextView tv_result;private OkHttpClient client = new OkHttpClient();//设置编码类型public static final MediaType JSON= MediaType.get("application/json; charset=utf-8");//get和post请求标识private static final int GET = 1;private static final int POST = 2;//传递消息private Handler handler = new Handler() {@Overridepublic void handleMessage(@NonNull Message msg) {super.handleMessage(msg);//区分传递的是get还是post消息switch (msg.what) {case GET://获取数据tv_result.setText((String) msg.obj);break;case POST:tv_result.setText((String) msg.obj);break;}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.test_okhttp);init();}private void init() {//使用原生的okhttp请求网络数据,get和postbtn_get_post = findViewById(R.id.btn_get_post);tv_result = findViewById(R.id.tv_result);btn_get_post.setOnClickListener(this);}@Overridepublic void onClick(View view) {switch (view.getId()) {//使用原生的okhttp请求网络数据,get和postcase R.id.btn_get_post://getDataFromGet();//开启子线程,获取getgetDataFromPost();//使用post获取数据break;}}//从子线程中获取网络数据private void getDataFromGet() {String url = "http://47.108.249.115:8080/LuShuDao0.0.2-1.0-SNAPSHOT/UserInfo/loginUser";new Thread() {@Overridepublic void run() {super.run();String result = null;try {result = get(url);Log.e("Test", result);Message message = Message.obtain();message.what = GET;message.obj = result;handler.sendMessage(message);} catch (IOException e) {e.printStackTrace();}}}.start();}/*okhttp必须在子线程执行get请求url:请求网址*/private String get(String url) throws IOException {Request request = new Request.Builder().url(url).build();try (Response response = client.newCall(request).execute()) {return response.body().string();}}//post请求,上传数据,在子线程中执行private String post(String url, String json) throws IOException {RequestBody body = RequestBody.create(JSON, json);Request request = new Request.Builder().url(url).post(body).build();try (Response response = client.newCall(request).execute()) {return response.body().string();}}//从子线程中获取网络数据private void getDataFromPost() {String url = "http://47.108.249.115:8080/LuShuDao0.0.2-1.0-SNAPSHOT/UserInfo/loginUser";new Thread() {@Overridepublic void run() {super.run();String result = null;try {//json是上传数据result = post(url, "");Log.e("Test", result);Message message = Message.obtain();message.what = POST;message.obj = result;handler.sendMessage(message);} catch (IOException e) {e.printStackTrace();}}}.start();}
}

总结

原生okhttp比较麻烦,使用第三方库去封装使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446291.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STL源码剖析 迭代器的概念和traits编程技法

迭代器&#xff1a;依序巡防某个聚合物(容器)所含的各个元素&#xff0c;但是不需要暴露这个聚合物的内部表述方式核心思想&#xff1a;将容器和算法分开&#xff0c;彼此独立设计容器和算法的泛型化&#xff0c;均可以使用模板&#xff0c;使用迭代器连接容器和算法例子 templ…

.sql文件如何执行_干货|一条SQL查询语句是如何执行的

作者&#xff1a;wanber链接&#xff1a;https://blog.nowcoder.net/n/9e120e8f1314466bb44fe706b283dc20

STL源码剖析 5中迭代器型别

最常使用的5种迭代器的型别 为 value_type、difference_type、pointer、reference、iterator_category。如果想要自己开发的容器和STL进行适配&#xff0c;就需要定义上述5种类型 iteraor_traits 必须针对传入的型别为 pointer 或者 pointer-to-const设计偏特化版本 template &…

Python学习16 正则表达式3 练习题

用户名匹配 1.用户名匹配&#xff1a;由数字、大小写字母、下划线_、中横线-组成&#xff0c;长度为6-12位&#xff0c;不能以数字开头。 import re usernameab578_-SDF resultre.search(^[a-zA-Z_-][0-9a-zA-Z_-]{5,12}$,username) print(result)邮箱 2.验证输入的邮箱&…

加载tf模型 正确率很低_深度学习模型训练全流程!

↑↑↑关注后"星标"Datawhale每日干货 & 每月组队学习&#xff0c;不错过Datawhale干货 作者&#xff1a;黄星源、奉现&#xff0c;Datawhale优秀学习者本文从构建数据验证集、模型训练、模型加载和模型调参四个部分对深度学习中模型训练的全流程进行讲解。一个成…

Python学习17 Turtle库绘图

学习网址&#xff1a;https://docs.python.org/zh-cn/3/library/turtle.html Turtle库 Turtle库是Python语言中一个很流行的绘制图像的函数库&#xff0c;一个小乌龟&#xff0c;在一个横轴为x、纵轴为y的坐标系原点&#xff08;画布中心&#xff09;&#xff0c;(0,0)位置开…

android ros 节点编写_嵌入式的我们为什么要学ROS

前言本来是要写一篇STM32移植ROS的一个小lib库&#xff0c;ROS一般都是需要跑在Linux上的&#xff0c;STM32使用就是当成一个ROS通讯的小节点&#xff0c;但是写文章时间不够&#xff0c;所以就简单做一篇ROS的介绍文章&#xff0c;分享给嵌入式的小伙伴们。ROS现在在机器人领域…

STL源码剖析 __type_traits

traits编程 弥补了C本身的不足STL只对迭代器进行规范制定出了iterator_traits&#xff0c;SGI在此基础上进一步扩展&#xff0c;产生了__type_traits双下划线的含义是这个是SGI内部使用的东西&#xff0c;不属于STL标准iterator_traits 负责萃取迭代器的特性__type_traits负责萃…

java 学生成绩

题目 对学生成绩大于60分的&#xff0c;输出“合格”。低于60分的&#xff0c;输出“不合格” 代码 使用/除法简化代码 package l1_switch_case;import java.util.Scanner;public class SwitchDemo2 {public static void main(String[] args) {Scanner scanner new Scanne…

STL源码剖析 序列式容器|Vector

容器的概观和分类 array 数组 、list 链表、tree树 、stack堆栈、queue队列、hash table散列表、set集合、map映射表根据数据在容器中的排列顺序&#xff0c;将上述数据结构分为序列式和关联式两种类型SGI STL使用内缩方式来表达基层和衍生层之间的关系衍生不是派生&#xff0…

ansible 修改文件变量_Ansible Playbook中的变量与引用

Ansible是一个系列文章&#xff0c;我会尽量以通俗易懂、诙谐幽默的总结方式给大家呈现这些枯燥的知识点&#xff0c;让学习变的有趣一些。Ansible自动化运维前言前面有说到使用playbook来搞一些复杂的功能&#xff0c;我们使用YAML来写playbook&#xff0c;就像我们用其它语言…

java 判断日期为第几天

题目1 编写程序&#xff1a;从键盘上输入2019年的“month”和“day”&#xff0c;要求通过程序 输出输入的日期为2019年的第几天。 代码1 从12月往下加日期数 package l1_switch_case; import java.util.Scanner; public class SwitchDemo4 {public static void main(Strin…

STL源码剖析 list概述

目录 list的节点(node) list迭代器 list 的构造和内存管理 list 的元素操作 list相较于vector连续的线性空间就显得很复杂&#xff0c;他的存储空间是不连续的&#xff0c;好处是每次插入和删除一个元素的时候&#xff0c;只需要配置或者释放一个元素的空间 插入和删除十分的…

vsftp不允许切换到其它目录_IntelliJ IDEA如何对project的目录进行筛选显示?

如果你的项目很庞大&#xff0c;同一个功能用到的各种文件散落在多个文件夹&#xff0c;开发时切换不便&#xff0c;可以利用scope功能&#xff0c;只显示该功能用到的文件&#xff0c;让project列表十分清爽&#xff0c;提高开发效率。本文使用的IDEA版本为2020.1。1、打开sco…

java 年份对应的中国生肖

题目 编写一个程序&#xff0c;为一个给定的年份找出其对应的中国生肖。 中国的生肖基于12年一个周期&#xff0c; 每年用一个动物代表&#xff1a; rat、ox、tiger、rabbit、dragon、snake、horse、sheep、monkey、 rooster、dog、pig。 提示&#xff1a;2019年&#xff1a;猪…

密码学专题 对称加密算法

一般来说&#xff0c;使用OpenSSL对称加密算法有两种方式&#xff0c;一种是使用API函数的方式&#xff0c;一种是使用OpenSSL提供的对称加密算法指令方式。本书将介绍对称加密算法的指令方式OpenSSL的对称加密算法指令主要用来对数据进行加密和解密处理&#xff0c;输入输出的…

网络防火墙单向和双向_单向晶闸管与双向晶闸管之间的不同之处

晶闸管是回一个可以控导点开关&#xff0c;能以弱电去控制强电的各种电路。晶闸管常用于整流&#xff0c;调压&#xff0c;交直流变化&#xff0c;开关&#xff0c;调光等控制电路中。具有提交小&#xff0c;重量轻&#xff0c;耐压高&#xff0c;容量大&#xff0c;效率高&…

java 遍历100以内的偶数,偶数的和,偶数的个数

题目 遍历100以内的偶数&#xff0c;偶数的和&#xff0c;偶数的个数 代码 package l2_for; /*遍历100以内的偶数&#xff0c;偶数的和&#xff0c;偶数的个数*/ public class ForDemo1 {public static void main(String[] args) {//方法1&#xff1a;int sum1 0,count10;f…

python版本切换_怎么切换python版本

展开全部 &#xff08;1&#xff09;分别安2113装 python-2.7.12.amd64.msi python-3.5.2-amd64.exe &#xff08;python官网下载的&#xff09; 顺序无所谓&#xff08;为5261了看着4102方便&#xff0c;我把安装路径修改统一了1653&#xff09; &#xff08;2&#xff09;配置…

java 打印

题目 编写程序从1循环到150&#xff0c;并在每行打印一个值&#xff0c;另外在每个3的倍数行 上打印出“foo”,在每个5的倍数行上打印“biz”,在每个7的倍数行上打印 输出“baz”。 代码 package l2_for;/** 编写程序从1循环到150&#xff0c;并在每行打印一个值&#xff0c…