GET请求基本步骤一:

1.在App/build.gradle或者Module/build.gradle中加入依赖:

compile 'com.squareup.okhttp:okhttp:2.4.0'   然后点击同步,同步的过程会下载 OkHttp的一些依赖的

2.写代码。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/button2"android:layout_width="match_parent"android:layout_height="wrap_content"android:onClick="doGet"android:text="Get" /><TextViewandroid:id="@+id/textView"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Hello World" />
</LinearLayout>

下面我们编写doGet方法
点击Get按钮的时候就会调用doGet方法。使用doGet方法访问一个HTTP网站。

对于一个请求首先需要4步:

  • 拿到OkHttpClient对象。

    OkHttpClient okHttpClient = new OkHttpClient();//一个全局的执行者,所有请求动作交由它执行。
  • 构造Request
    //引入import com.squareup.okhttp.Request;的包
    Request.Builder builder=new Request.Builder();//通过Builder来构造request。
    Request request=builder.get().url("https://www.imooc.com/").build();//builder到build返回request
  • 将Request封装成Call
    Call call = okHttpClient.newCall(request);//将request传入
  • 执行call
    /*Response response=call.execute();该方法返回值是Response,需要抛出异常*/
    call.enqueue(new Callback() {@Overridepublic void onFailure(Request request, IOException e) {//发生错误时回调}@Overridepublic void onResponse(Response response) throws IOException {//执行完成回调。可以通过response进行操作String string = response.body().string();textView.setText(string);}
    });

3.简单测试:访问网络所以打开Manifest.xml加入网络权限。

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

编写简单的Log类。

public class L {private static final String TAG = "Imooc_okhttp";//标记private static boolean debug=true;//开关。当你不想显示Log的时候改为false.public static void e(String msg){if(debug){Log.e(TAG,msg);}}
}

MainActivity代码如下:

public class MainActivity extends AppCompatActivity {private TextView textView;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);}public void doGet(View view){textView=(TextView) findViewById(R.id.textView);OkHttpClient okHttpClient = new OkHttpClient();Request.Builder builder=new Request.Builder();final Request request=builder.get().url("https://www.imooc.com/").build();Call call = okHttpClient.newCall(request);call.enqueue(new Callback() {@Overridepublic void onFailure(Request request, IOException e) {L.e("onFailure"+e.getMessage());e.printStackTrace();}@Overridepublic void onResponse(Response response) throws IOException {L.e("onResponse:");//该方法的返回值是response,所以我们可以通过response拿到相关信息。String string = response.body().string();//想拿到字符串,可以从response-body-string/*String a="111";*/L.e(string);/*L.e(a);*/}});}
}
如果我们直接把textView.setText(string);放入onResponse中,则会出现CalledFromWrongThreadException异常。
原因是onResponse在子线程里,控制界面UI应放在UI/主线程中。
下面的代码应写在onResponse子线程中,支持大文件下载(主线程不行)。一些基础知识哦。
//即使是一个文件我们这里也可以IO操作。容量也就是我们一个buffer大小。这样就支持大文件下载
InputStream is=response.body().byteStream();

以下用线程显示文字并把文字显示在textview中。使用线程既方便又节省代码对不对??

public class MainActivity extends AppCompatActivity {public TextView textView;public String string;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);}public void doGet(View view){textView=(TextView) findViewById(R.id.textView);OkHttpClient okHttpClient = new OkHttpClient();Request.Builder builder=new Request.Builder();final Request request=builder.get().url("https://www.imooc.com/").build();Call call = okHttpClient.newCall(request);call.enqueue(new Callback() {@Overridepublic void onFailure(Request request, IOException e) {L.e("onFailure"+e.getMessage());e.printStackTrace();}@Overridepublic void onResponse(Response response) throws IOException {L.e("onResponse:");//该方法的返回值是response,所以我们可以通过response拿到相关信息。string = response.body().string();//想拿到字符串,可以从response-body-stringrunOnUiThread(new Runnable() {@Overridepublic void run() {textView.setText(string);}});}});}
}

GET请求基本步骤二:

接下来我们就讲解以下细节问题咯。相信看完步骤一,大家已经把步骤的使用已经基本了解了,其他就是配置信息。1.比如说一个网络访问框架,想设置一些超时时间,发生错误的时候能不能retry,这样的一些方法就取决于全局的执行者里。按ctrl键点击OkHttpClient,里面会有很多全局的设置信息可以通过OkHttpClient的set方法进行设置。2.构造request.Builder也有一些方法。Request中也有一些参数和方法。那么具体的大家快去看源码把。3.接下来将request换成一个call对象,Call是单个请求的执行者。Call有execute()方法,与之对应就有cancel()、isCanceled()方法。4.最后执行回调。如果是异步的话有Callback(),同步的话有execute().

有关文章:https://blog.csdn.net/fightingXia/article/details/70947701

https://blog.csdn.net/qq_35270692/article/details/72229753

OkHttp GET请求步骤相关推荐

  1. Okhttp同步请求源码分析

    进阶android,OKhttp源码分析--同步请求的源码分析 OKhttp是我们经常用到的框架,作为开发者们,我们不单单要学会灵活使用,还要知道他的源码是如何设计的. 今天我们来分析一下OKhttp ...

  2. js实现ajax的post请求步骤

    post请求步骤与前篇的get请求步骤差别不大,只是增加了 xhr.setRequestHeader("Content-type","application/x-www- ...

  3. Fragment标签页+OKHttp网络请求数据+MVP模式

    分包方式 需要的第三方依赖 Fragment 新建两个fragment MainActivity 主页面布局 设置Fragment+tablayout的适配器 Fragment标签页结束 OKHttp ...

  4. Ajax请求步骤(十)

    Ajax请求步骤(十) 实现的功能: 点击查询,触发事件 获取用户输入的单号 创建浏览器提的对象XMLHttpRequest对象 让他请求 服务器 给他地址 参数 类型 响应的数据获取 解析数据--渲 ...

  5. Android okHttp网络请求之缓存控制Cache-Control

    前言: 前面的学习基本上已经可以完成开发需求了,但是在项目中有时会遇到对请求做个缓存,当没网络的时候优先加载本地缓存,基于这个需求我们来学习一直okHttp的Cache-Control. okHttp ...

  6. Android 开发之Okhttp网络请求日志打印

    这里写自定义目录标题 Android 开发之Okhttp 网络请求日志打印 OkHTTP网络日志打印 Android 开发之Okhttp 网络请求日志打印 网络请求是开发的日常工作内容之一,网络日志打 ...

  7. Android中使用logger打印完整的okhttp网络请求和响应的所有相关信息(请求行、请求头、请求体、响应行、响应行、响应头、响应体)

    如果你的项目中的网络请求库是Retrofit的话,他的底层封装的是OkHttp,通常调试网络接口时都会将网络请求和响应相关数据通过日志的形式打印出来.OkHttp也提供了一个网络拦截器okhttp-l ...

  8. okhttp post请求

    okhttp post请求 1.简介 OKHttp是一款高效的HTTP客户端,支持连接同一地址的链接共享同一个socket,通过连 接池来减小响应延迟,还有透明的GZIP压缩,请求缓存等优势,其核心主 ...

  9. Elasticsearch基础3——密钥库工具、证书生成工具及四种生成模式、https请求步骤流程

    文章目录 一.密钥库工具(elasticsearch-keystore) 1.1 列出密钥库里的设置 1.2 查看密钥库密码 1.3 设置/改变秘钥库密码 1.4 添加字符串设置 1.5 添加文件设置 ...

最新文章

  1. Linux中重定向--转载
  2. Mini音乐播放器【简单版】(附源码)
  3. pyhanlp 分词与词性标注
  4. android python opencv_使用Python和OpenCV自动化Android游戏
  5. Intel Realsense D435 opencv 为什么将color图转换成灰度图后,再与depth图水平堆叠,其结果一片黑色?(数据未map到0-255)
  6. CA自签证书的颁发及应用
  7. 给Source Insight做个外挂系列之三--构建外挂软件的定制代码框架
  8. C++ 简单的 Tcp 实现[socket] 服务器端与客户端通信
  9. mysql学习(2)索引的本质
  10. MySQL基于日志还原数据
  11. [paper reading] FCOS
  12. PrintStream 打印流、System 剖析、Java 16 进制转换
  13. Sql Server系列:数据表操作
  14. vs番茄助手的方便功能和便捷快捷键介绍
  15. Basic Blocks
  16. 前端做微信好友分享_一篇搞定微信分享和line分享
  17. DHTML 大全分析
  18. 妥妥的去面试之数据结构与算法(一)
  19. Qt5.5-msvc2013-x64编译的程序在其它机器上无法运行,提示0xc000007b错误
  20. 中科曙光新型算力,构建数字设施大动脉

热门文章

  1. H264熵编码之CABAC
  2. foxmail皮肤_确实很棒!Foxmail 7.1邮箱客户端体验
  3. JS判断ios系统的版本号
  4. ipad文件APP连接服务器,是时候认识一下 iPad 的文件管理了
  5. ipad部分截屏方法
  6. 衡量电子计算机性能指标是,衡量计算机的性能指标有
  7. atcoder Beginner Contest 156 Roaming(组合数学 插板法)
  8. sql 练习查询和“01“号的同学学习的课程完全相同的其他同学的信息
  9. 科学的研究方法——笛卡尔
  10. mysql非结构化查询_Mysql(2.3) 简单查询(SELECT)、子查询