1、首先看一下最终效果的截图,看看是不是你想要的,这个年代大家都很忙,开门见山很重要!

简要说下,点击不同按钮可以实现通过不同的方式发送OkHttp请求,并返回数据,这里请求的是网页,所以返回的都是些网页的代码。

2、下面给出代码,代码的实现步骤要点已经在代码行中加了注释,不过多赘述。

MainActivity.java:

package thonlon.example.cn.simpleokhttpdemo;

import android.app.Activity;
import android.app.Application;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast; import java.io.IOException; import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private TextView tv;
private Button btn_async_request, btn_sync_request, btn_async_post, btn_sync_post; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
} /**
* 初始化视图
*/
public void initView() {
tv = (TextView) findViewById(R.id.tv);
btn_async_request = (Button) findViewById(R.id.btn_async_request);
btn_sync_request = (Button) findViewById(R.id.btn_sync_request);
btn_async_post = (Button) findViewById(R.id.btn_async_post);
btn_sync_post = (Button) findViewById(R.id.btn_sync_post); btn_async_request.setOnClickListener(this);
btn_sync_request.setOnClickListener(this);
btn_async_post.setOnClickListener(this);
btn_sync_post.setOnClickListener(this);
} /**
* 点击事件
* @param view
*/
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_async_request:// 执行get方式的异步请求
getAsyncRequest();
break;
case R.id.btn_sync_request://执行get方式的同步请求
getSyncRequest();
break;
case R.id.btn_async_post://执行post方式的异步请求
postAsynsRequest();
break;
case R.id.btn_sync_post://执行post方式的同步请求
postSyncRequest();
break;
}
} /**
* 输出内容到TextView
* @param request
*/
public void showRequest(final String request) {
runOnUiThread(new Runnable() {
@Override
public void run() {
tv.setText(request);
}
});
}
/**
* 发送异步GET请求
*/
private void getAsyncRequest() {
//创建OkHttpClient对象
OkHttpClient okhttpClient = new OkHttpClient();
//创建Request对象
Request request = new Request.Builder()
.url("https://www.haha.mx/joke/2730898")//请求的地址,根据需求带参
.build();
//创建call对象
Call call = okhttpClient.newCall(request);
call.enqueue(new Callback() {
/**
* 请求失败后执行
* @param call
* @param e
*/
@Override
public void onFailure(Call call, IOException e) {
Toast.makeText(MainActivity.this,"异步get方式请求数据失败!",Toast.LENGTH_LONG).show();
} /**
* 请求成功后执行
* @param call
* @param response
* @throws IOException
*/
@Override
public void onResponse(Call call, Response response) throws IOException {
final String res = response.body().string();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this,"异步get方式请求数据成功!",Toast.LENGTH_LONG).show();
showRequest(res);
}
});
}
});
} /**
* 发送同步的get请求
*/
public void getSyncRequest() {
new Thread(new Runnable() {
@Override
public void run() {
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder()
.url("http://hibernate.org/orm/releases/5.3/")
.build();
try {
Response response = okHttpClient.newCall(request).execute();
String responseResult = response.body().string();
showRequest(responseResult);
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
} /**
* 发送异步post()请求
*/
private void postAsynsRequest() {
OkHttpClient okhttpClient = new OkHttpClient();
FormBody.Builder formBody = new FormBody.Builder();//创建表单请求体
formBody.add("usernam", "Thanlon");
formBody.add("password", "123");
Request request = new Request.Builder()
.url("https://www.baidu.com")
.post(formBody.build())
.build();
Call call2 = okhttpClient.newCall(request);
call2.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Toast.makeText(MainActivity.this,"异步post请求数据失败!",Toast.LENGTH_LONG).show();
} @Override
public void onResponse(Call call, Response response) throws IOException {
final String res = response.body().string();
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this,"post异步请求数据成功!",Toast.LENGTH_LONG).show();
showRequest(res);
}
});
}
});
} /**
* 发送同步的post请求
*/
public void postSyncRequest() {
new Thread(new Runnable() {
@Override
public void run() {
OkHttpClient okHttpClient = new OkHttpClient();
FormBody.Builder formBody = new FormBody.Builder();
formBody.add("username", "Thanlon");
formBody.add("password", "123");
Request request = new Request.Builder()
.url("https://www.douban.com")
.post(formBody.build())
.build();
try {
Response response = okHttpClient.newCall(request).execute();
String responseResult = response.body().string();
showRequest(responseResult);
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
}

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
tools:context="thonlon.example.cn.simpleokhttpdemo.MainActivity"> <TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="显示请求后的信息"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.4" /> <Button
android:id="@+id/btn_async_request"
android:layout_width="0dp"
android:layout_height="50dp"
android:text="发送request异步请求"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0" /> <Button
android:id="@+id/btn_sync_request"
android:layout_width="0dp"
android:layout_height="50dp"
android:text="发送request同步请求"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.1" /> <Button
android:id="@+id/btn_async_post"
android:layout_width="0dp"
android:layout_height="50dp"
android:text="发送post异步请求"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.2" /> <Button
android:id="@+id/btn_sync_post"
android:layout_width="0dp"
android:layout_height="50dp"
android:text="发送post同步请求"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.3" /> </android.support.constraint.ConstraintLayout>

安卓中使用OkHttp发送数据请求的两种方式(同、异步的GET、POST) 示例-- Android基础的更多相关文章

  1. .Net Core下发送WebRequest请求的两种方式

    1.使用RestSharp.NetCore 2.使用WebApi请求方式

  2. C#中Post请求的两种方式发送参数链和Body的

    POST请求 有两种方式 一种是组装key=value这种参数对的方式 一种是直接把一个字符串发送过去 作为body的方式 我们在postman中可以看到 sfdsafd sdfsdfds publi ...

  3. 数据存储的两种方式:Cookie 和Web Storage

    数据存储的两种方式:Cookie 和Web Storage 1.Cookie Cookie的作用就像你去超市购物时,第一次给你办张购物卡,这个购物卡里存放了一些你的个人信息,下次你再来这个连锁超市时, ...

  4. 数据存储的两种方式:Cookie 和Web Storage(转)

    数据存储的两种方式:Cookie 和Web Storage   数据存储的两种方式:Cookie 和Web Storage 1.Cookie Cookie的作用就像你去超市购物时,第一次给你办张购物卡 ...

  5. 第二节:SSL证书的申请、配置(IIS通用)及跳转Https请求的两种方式

    一. 相关概念介绍 1. SSL证书服务 SSL证书服务由"服务商"联合多家国内外数字证书管理和颁发的权威机构.在xx云平台上直接提供的服务器数字证书.您可以在阿里云.腾讯云等平台 ...

  6. 解决 SharePoint 2010 拒绝访问爬网内容源错误的小技巧(禁用环回请求的两种方式)

    这里有一条解决在SharePoint 2010搜索爬网时遇到的“拒绝访问错误”的小技巧. 首先要检查默认内容访问帐户是否具有相应的访问权限,或者添加一条相应的爬网规则.如果目标资源库是一个ShareP ...

  7. Android中EditText显示明文与密文的两种方式

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 记录输入框显示.隐藏密码的简单布局以及实现方式. 效果图    代码分析 方式一 /**方式一:*/ private void sh ...

  8. 在eclipse中使用Maven建web工程的两种方式

    Eclipse版本:Neon Release (4.6.0) Maven版本:3.3.9 第一种方式: 右键新建maven工程,勾选创建一个简单工程 填入信息,注意打包方式要改为war 点击完成,创建 ...

  9. PHP发送HTTP请求的几种方式

    转发:https://blog.tanteng.me/2017/07/php-curl-guzzlehttp/ 1)PHP开发中我们常用CURL 方式封装 HTTP请求,什么是CURL? CURL 是 ...

随机推荐

  1. NOIP 车站分级 (luogu 1983 & codevs 3294 & vijos 1851) - 拓扑排序 - bitset

    描述 一条单向的铁路线上,依次有编号为 1, 2, ..., n 的 n 个火车站.每个火车站都有一个级别,最低为 1 级.现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟车次停靠了火车 ...

  2. Plantuml画图工具

    1,Plantuml画图工具 安装指南: Mac sublimetext http://blog.csdn.net/zhangjikuan/article/details/53365730 win i ...

  3. 2018年11月22日 字典 E18灯翼平整度 D&G is SB

    如果创建的东西需要增加修改的,则用list 如果不能修改就用元祖,如果需要修改这需要转成list 字典 字典的value是任意值 info= {"k1":'v1',"k2 ...

  4. sudo中的 各类授权 名称包含的操作 权限命令?

    sudo是 do something as super user: 或者说: as Super User Do something: 就是 为 "非根用户赋予根用户的权限" 使用 ...

  5. 字体在win10下显示模糊,有锯齿

    目录 系统设置: 修改冲突软件启动设置: vscode: vs2017: atom: gpu软件修改: 参考: 系统设置: 一般为了提高性能,会关闭平滑屏幕字体边缘 修改冲突软件启动设置: 经过 gp ...

  6. R: Coercing LHS to a list

    #  Coercing LHS to a list expr_3$ID<-rownames(expr_3) # OK ids<-rownames(expr_3)expr_4<-cbi ...

  7. Asp.net MVC 控制器ActionResult的例子

    ActionResult 父类型 ViewResult View() 多重载应用 PartialViewResult PartialView() 部分试图 New EmptyResult()  空 如 ...

  8. (转载)WinformGDI+入门级实例——扫雷游戏(附源码)

    本文将作为一个入门级的.结合源码的文章,旨在为刚刚接触GDI+编程或对相关知识感兴趣的读者做一个入门讲解.游戏尚且未完善,但基本功能都有,完整源码在文章结尾的附件中. 整体思路: 扫雷的游戏界面让我从 ...

  9. NOI 2011 阿狸的打字机(AC自动机+主席树)

    题意 https://loj.ac/problem/2444 思路 ​多串匹配,考虑 \(\text{AC}\) 自动机.模拟打字的过程,先建出一棵 \(\text{Trie}\) 树,把它变成自动机 ...

  10. 测试常用的Linux命令总结

    列出常用的命令和最常用的用法,排名不分先后:) 1. find在/home目录下查找以.txt结尾的文件名find /home -name "*.txt"同上,但忽略大小写find ...