MainActivity.class

  1. package com.example.administrator.okhttp3;
  2.  
  3. import android.support.v7.app.AppCompatActivity;
  4. import android.os.Bundle;
  5. import android.util.Log;
  6. import android.view.View;
  7. import android.widget.Button;
  8. import android.widget.TextView;
  9.  
  10. import java.io.File;
  11. import java.io.FileOutputStream;
  12. import java.io.IOException;
  13. import java.io.InputStream;
  14.  
  15. import okhttp3.Call;
  16. import okhttp3.Callback;
  17. import okhttp3.FormBody;
  18. import okhttp3.OkHttpClient;
  19. import okhttp3.Request;
  20. import okhttp3.RequestBody;
  21. import okhttp3.Response;
  22.  
  23. public class MainActivity extends AppCompatActivity implements View.OnClickListener {
  24. private static OkHttpClient client = new OkHttpClient();
  25. private Request request;
  26. private Response response;
  27.  
  28. private Button button1, button2, button3, button4;
  29. private TextView textView;
  30.  
  31. @Override
  32. protected void onCreate(Bundle savedInstanceState) {
  33. super.onCreate(savedInstanceState);
  34. setContentView(R.layout.activity_main);
  35. button1 = (Button) findViewById(R.id.btn_one);
  36. button2 = (Button) findViewById(R.id.btn_two);
  37. button3 = (Button) findViewById(R.id.btn_three);
  38. button4 = (Button) findViewById(R.id.btn_four);
  39. button1.setOnClickListener(this);
  40. button2.setOnClickListener(this);
  41. button3.setOnClickListener(this);
  42. button4.setOnClickListener(this);
  43. textView = (TextView) findViewById(R.id.tv);
  44. }
  45.  
  46. @Override
  47. public void onClick(View view) {
  48. switch (view.getId()) {
  49. case R.id.btn_one://同步get
  50. client = new OkHttpClient();
  51. request = new Request.Builder().url("http://cache.video.iqiyi.com/jp/avlist/202861101/1/?callback=jsonp9").build();
  52. new Thread(new Runnable() {
  53. @Override
  54. public void run() {
  55. try {
  56. response = client.newCall(request).execute();
  57. final String src = response.body().string();
  58. Log.e("Tag", response.body().string());
  59. runOnUiThread(new Runnable() {
  60. @Override
  61. public void run() {
  62. textView.setText(src);
  63. }
  64. });
  65.  
  66. } catch (IOException e) {
  67. e.printStackTrace();
  68. }
  69. }
  70. }).start();
  71.  
  72. break;
  73. case R.id.btn_two://异步get
  74. request = new Request.Builder().url("http://cache.video.iqiyi.com/jp/avlist/202861101/1/?callback=jsonp9").build();
  75. client.newCall(request).enqueue(new Callback() {
  76. @Override
  77. public void onFailure(Call call, IOException e) {
  78.  
  79. }
  80.  
  81. @Override
  82. public void onResponse(Call call, Response response) throws IOException {
  83. final String src = response.body().string();
  84. Log.e("Tag", response.body().string());
  85. runOnUiThread(new Runnable() {
  86. @Override
  87. public void run() {
  88. textView.setText(src);
  89. }
  90. });
  91. }
  92. });
  93. break;
  94. case R.id.btn_three://提交表单
  95. RequestBody requestBody = new FormBody.Builder()
  96. .add("search", "papap").build();
  97. request = new Request.Builder().url("https://en.wikipedia.org/w/index.php").post(requestBody).build();
  98. client.newCall(request).enqueue(new Callback() {
  99. @Override
  100. public void onFailure(Call call, IOException e) {
  101.  
  102. }
  103.  
  104. @Override
  105. public void onResponse(Call call, Response response) throws IOException {
  106. final String src = response.body().string();
  107. runOnUiThread(new Runnable() {
  108. @Override
  109. public void run() {
  110. textView.setText(src);
  111. }
  112. });
  113. }
  114. });
  115. break;
  116. case R.id.btn_four://文件下载
  117. request = new Request.Builder().url("http://pic2.ooopic.com/10/18/01/04bOOOPICb3.jpg").build();
  118. client.newCall(request).enqueue(new Callback() {
  119. @Override
  120. public void onFailure(Call call, IOException e) {
  121.  
  122. }
  123.  
  124. @Override
  125. public void onResponse(Call call, Response response) throws IOException {
  126. InputStream inputStream = response.body().byteStream();
  127. FileOutputStream fileOutputStream = new FileOutputStream(new File("/sdcard/tupian.jpg"));
  128. byte[] buffer = new byte[2048];//每次循环读取2K的数据
  129.  
  130. int len = 0;
  131. while ((len = inputStream.read(buffer)) != -1) {
  132. fileOutputStream.write(buffer, 0, len);
  133. }
  134. fileOutputStream.flush();
  135.  
  136. runOnUiThread(new Runnable() {
  137. @Override
  138. public void run() {
  139. textView.setText("文件下载成功。。。");
  140. }
  141. });
  142. }
  143. });
  144. break;
  145. }
  146. }
  147. }

PS:需要注意的是,在进行同步Get网络请求时,因为都是一个耗时操作,所以需要建立一个子线程去进行请求; 并且,UI界面的更新,必须放在主线程去完成!

activity_main.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:orientation="vertical"
  7. android:paddingBottom="@dimen/activity_vertical_margin"
  8. android:paddingLeft="@dimen/activity_horizontal_margin"
  9. android:paddingRight="@dimen/activity_horizontal_margin"
  10. android:paddingTop="@dimen/activity_vertical_margin"
  11. tools:context="com.example.administrator.okhttp3.MainActivity">
  12.  
  13. <Button
  14. android:id="@+id/btn_one"
  15. android:layout_width="wrap_content"
  16. android:layout_height="wrap_content"
  17. android:text="同步get" />
  18.  
  19. <Button
  20. android:id="@+id/btn_two"
  21. android:layout_width="wrap_content"
  22. android:layout_height="wrap_content"
  23. android:text="异步get" />
  24.  
  25. <Button
  26. android:id="@+id/btn_three"
  27. android:layout_width="wrap_content"
  28. android:layout_height="wrap_content"
  29. android:text="Post提交表单" />
  30.  
  31. <Button
  32. android:id="@+id/btn_four"
  33. android:layout_width="wrap_content"
  34. android:layout_height="wrap_content"
  35. android:text="文件下载" />
  36.  
  37. <TextView
  38. android:id="@+id/tv"
  39. android:layout_width="wrap_content"
  40. android:layout_height="wrap_content"
  41. android:text="text"/>
  42. </LinearLayout>

OKhttp基本使用介绍的更多相关文章

  1. OKHttp使用简单介绍

    如今android网络方面的第三方库非常多,volley.Retrofit.OKHttp等,各有各自的特点,这边博客就来简介下怎样使用OKHttp. 梗概 OKHttp是一款高效的HTTP客户端,支持 ...

  2. Android okHttp网络请求之Retrofit+Okhttp+RxJava组合

    前言: 通过上面的学习,我们不难发现单纯使用okHttp来作为网络库还是多多少少有那么一点点不太方便,而且还需自己来管理接口,对于接口的使用的是哪种请求方式也不能一目了然,出于这个目的接下来学习一下R ...

  3. Android OkHttp使用与分析

    安卓开发领域,很多重要的问题都有了很好的开源解决方案,例如网络请求 OkHttp + Retrofit 简直就是不二之选."我们不重复造轮子不表示我们不需要知道轮子该怎么造及如何更好的造!& ...

  4. 使用基于Android网络通信的OkHttp库实现Get和Post方式简单操作服务器JSON格式数据

     目录 前言 1 Get方式和Post方式接口说明 2 OkHttp库简单介绍及环境配置 3 具体实现 前言 本文具体实现思路和大部分代码参考自<第一行代码>第2版,作者:郭霖:但是文中讲 ...

  5. Android的OkHttp开源框架的使用方法

    前段时间研究了下Android里面非常火爆的网络请求库OkHttp,这篇文章主要来介绍下OkHttp的常用请求的使用方式,后面一篇文章会介绍本人基于OkHttp封装的一个操作更简单.更适用于项目的网络 ...

  6. OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据

    OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据 我们这片博文就来聊聊这个反响很不错的OkHttp了,标题是我恶搞的,本篇将着重详细的 ...

  7. OKHttp概览

    1,整体思路 从使用方法出发,首先是怎么使用,其次是我们使用的功能在内部是如何实现的,实现方案上有什么技巧,有什么范式.全文基本上是对 OkHttp 源码的一个分析与导读,非常建议大家下载 OkHtt ...

  8. 【转载】okhttp源码解析

    转自:http://www.open-open.com/lib/view/open1472216742720.html https://blog.piasy.com/2016/07/11/Unders ...

  9. Android Okhttp POST提交键值对

    以前的项目网络连接那块一直坚持使用HttpClient,总是会出现一些莫名奇妙的问题,现在新的项目使用了OKHttp网络框架,发现超级好用,上网再了解下,发现OkHttp口碑真的不错,对比之下Http ...

随机推荐

  1. python4delphi 使用

    Python 开发桌面程序, 之前写过一个使用IronPython的博客. 下面这个方案使用 delphi 作为主开发语言,通过 python4delphi 控件包将 python 作为 script ...

  2. nyoj 15 括号匹配(二)动态规划

    当时看到(二)就把(一)做了, 一很容易,这道题纠结了好几天,直到今晚才看懂别人的代码谢,勉强才写出来.................... 不愧是难度6的题. #include <stdio ...

  3. php curl 库使用

    支持http basic认证: curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD ...

  4. jquery 表单清空

    $(':input','#myform') .not(':button, :submit, :reset, :hidden') .val('') .removeAttr('checked') .rem ...

  5. javascript高级程序设计---Element对象

    Element对象对应网页的HTML标签元素.每一个HTML标签元素,在DOM树上都会转化成一个Element节点对象(以下简称元素节点).元素节点的nodeType属性都是1,但是不同HTML标签生 ...

  6. CodeForces 615B Longtail Hedgehog

    题目: http://codeforces.com/problemset/problem/615/B 题意:题目描述很复杂,但实际上很简单.大意就是连续的几个点组成尾巴,要求尾巴的长度乘以尾巴终点的分 ...

  7. spring ioc原理

    最近,买了本Spring入门书:spring In Action .大致浏览了下感觉还不错.就是入门了点.Manning的书还是不错的,我虽然不像哪些只看Manning书的人那样专注于Manning, ...

  8. CSU 1120 病毒(DP)

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1120 解题报告:dp,用一个串去更新另一个串,递推方程是: if(b[i] > a ...

  9. Unity手游之路<三> 基于Unity+Java的聊天室源码

    http://blog.csdn.net/janeky/article/details/17233199 项目介绍 这是一个简单的Unity项目,实现最基本的聊天室群聊功能.登录聊天室后,用户可以输入 ...

  10. 在应用中嵌入Python:转

    在应用中嵌入Python 前面的章节讨论如何扩展Python,如何生成适合的C库等.不过还有另一种情况:通过将Python嵌入C/C++应用以扩展程序的功能.Python嵌入实现了一些使用Python ...