Android-okhttp
在AndroidManifest.xml配置网络访问权限:
<!-- 访问网络是危险的行为 所以需要权限 -->
<uses-permission android:name="android.permission.INTERNET" />
在 app/build.gradle 加入
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
然后点击 sync now 下载okhttp支持包

OKHttpEngine
package liudeli.async.okhttp; import android.util.Log; import java.io.IOException; import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response; /**
* @Author Liudeli
* @Describe:网络请求相关的引擎
*/
public class OKHttpEngine { private final String TAG = OKHttpEngine.class.getSimpleName(); /**
* 单例模式
*/
private static OKHttpEngine engine;
public static OKHttpEngine getInstance() { if (null == engine) { synchronized (OKHttpEngine.class) { if (null == engine) {
engine = new OKHttpEngine();
}
}
}
return engine;
} private OKHttpEngine(){} private OkHttpClient client = new OkHttpClient(); /**
* Http Get 请求
* [属于同步方法,使用需要加子线程]
* @param url
* @return
* @throws IOException
*/
public String httpGetResult(String url) throws IOException { Request request = new Request.Builder()
.url(url)
.build();
Response response = client.newCall(request).execute();
return response.body().string();
} /**
* Http Post 请求
* [属于同步方法,使用需要加子线程]
* @param url
* @return
* @throws IOException
*/
public String httpPostResult(String url) throws IOException {
Request request = new Request.Builder()
.url(url)
.build();
Response response = client.newCall(request).execute();
return response.body().string();
} /***************************** 以下属于JSON请求想的代码了 **********************************/ public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8"); /**
* 联调成功方法 postJsonRequest
* [属于同步方法,使用需要加子线程,此方法内部已经加入子线程]
* @param url
* @param stringJSON
*/
public void postJsonRequest(final String url, final String stringJSON, final MyOKHttpCallback callback) {
new Thread() { @Override
public void run() {
super.run(); try {
RequestBody body = RequestBody.create(JSON, stringJSON); Request request = new Request.Builder()
.url(url)
.post(body)
.build(); Response response = client.newCall(request).execute(); String result = response.body().string(); Log.d(TAG, "请求结果信息 result:" + result); callback.result(result); } catch (Exception e) {
e.printStackTrace();
Log.e(TAG, "postJsonRequest e:" + e.getMessage());
callback.result("error");
}
}
}.start();
} /**
* Post请求,请求的数据是JSON,异步方法,不需要加入子线程
* @param url
* @param stringJSON
*/
public void postJSONRequest(String url, String stringJSON, Callback callback) {
try { RequestBody body = RequestBody.create(JSON, stringJSON); Request request = new Request.Builder()
.url(url)
.post(body)
.build(); Call call = client.newCall(request); // 使用client去请求 call.enqueue(callback); // 回调方法,>>> 可以获得请求结果信息 } catch (Exception e) {
e.printStackTrace();
}
}
}
MyOKHttpCallback
package liudeli.async.okhttp; /**
* @Author Liudeli
* @Describe:ost、Get 普通请求所用到的接口回调接口
*/
public abstract class MyOKHttpCallback { /**
* 一般是用于,Post、Get 普通请求所用到的接口回调方法
* 异步请求暂时用不到,因为异步用专门的回调方法
* @param result
*/
public abstract void result(String result);
}
MyActivity 使用 okhttp
package liudeli.async.okhttp; import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View; import org.json.JSONObject; import java.io.IOException; import liudeli.async.R;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response; public class MyActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_my);
} /**
* 中国天气网地址:http://www.weather.com.cn
*/
private final String PATH1 = "http://www.weather.com.cn/data/sk/101110101.html";
private final String PATH2 = "http://www.weather.com.cn/data/sk/101110101.html";
private final String PATH3 = "http://www.weather.com.cn/data/sk/101110101.html";
private final String PATH4 = "http://www.weather.com.cn/data/sk/101110101.html"; /**
* 普通Http Get 请求
* @param view
*/
public void request1(View view) {
final OKHttpEngine okHttpEngine = OKHttpEngine.getInstance(); new Thread(){ @Override
public void run() {
super.run(); try {
String result = okHttpEngine.httpGetResult(PATH1);
Log.d("@@@", "普通Http Get 请求 响应结果:" + result);
} catch (IOException e) {
e.printStackTrace();
} }
}.start(); } /**
* 普通Http Get 请求
* @param view
*/
public void request2(View view) {
final OKHttpEngine okHttpEngine = OKHttpEngine.getInstance(); new Thread(){ @Override
public void run() {
super.run(); try {
String result = okHttpEngine.httpPostResult(PATH2);
Log.d("@@@", "普通Http Post 请求 响应结果:" + result);
} catch (IOException e) {
e.printStackTrace();
} }
}.start();
} /**
* Post请求JSON数据1
* @param view
*/
public void request3(View view) {
final OKHttpEngine okHttpEngine = OKHttpEngine.getInstance(); /**
* 这里的JSON jsonString 到底有何用:
*
* 例如:以前我在公司做项目的时候,每次请求时,需要传输请求头信息给>>>服务器
* 请求头信息,是公司内部需要的请求头信息,是服务器规定的
* JSONObject jsonHeader = new JSONObject();
* jsonHeader.put("serviceCode", serviceCode);
* jsonHeader.put("channelCode", channelCode);
* jsonHeader.put("osType", onType);
* jsonHeader.put("appVersion", appVersion);
* jsonHeader.put("rocket", rocket);
* jsonHeader.put("requestTime", requestTime);
* ....
*
* String jsonString =jsonHeader..toString();
*/ /**
* 这里的JSON jsonString 到底有何用:
*
* 例如:以前我在公司做项目的时候,每次请求时,需要传输参数给>>>服务器
* 参数信息,是公司内部需要的参数信息,是服务器规定的
* JSONObject jsonParam = new JSONObject();
* jsonParam.put("param1", param1);
* jsonParam.put("param2", param2);
* jsonParam.put("param3", param3);
* jsonParam.put("param4", param4);
* jsonParam.put("param5", param5);
* jsonParam.put("param6", param6);
*
* String jsonString = jsonParam.toString();
*/ try {
JSONObject jsonParam = new JSONObject();
/*jsonParam.put("param1", "");
jsonParam.put("param2", "");
jsonParam.put("param3", "");
jsonParam.put("param4", "");
jsonParam.put("param5", "");
jsonParam.put("param6", "");*/ // 注意⚠️:jsonString = null 当RequestBody.create(JSON, stringJSON);时会报错
String jsonString = null /*jsonParam.toString()*/ ; okHttpEngine.postJsonRequest(PATH3, jsonString, new MyOKHttpCallback() { @Override
public void result(String result) {
Log.d("@@@", "Post请求JSON数据1 响应结果:" + result);
}
}); }catch (Exception e) {
e.printStackTrace();
} } /**
* Post请求JSON数据2 - okhttp异步
* @param view
*/
public void request4(View view) {
final OKHttpEngine okHttpEngine = OKHttpEngine.getInstance(); /**
* 这里的JSON jsonString 到底有何用:
*
* 例如:以前我在公司做项目的时候,每次请求时,需要传输请求头信息给>>>服务器
* 请求头信息,是公司内部需要的请求头信息,是服务器规定的
* JSONObject jsonHeader = new JSONObject();
* jsonHeader.put("serviceCode", serviceCode);
* jsonHeader.put("channelCode", channelCode);
* jsonHeader.put("osType", onType);
* jsonHeader.put("appVersion", appVersion);
* jsonHeader.put("rocket", rocket);
* jsonHeader.put("requestTime", requestTime);
* ....
*
* String jsonString =jsonHeader..toString();
*/ /**
* 这里的JSON jsonString 到底有何用:
*
* 例如:以前我在公司做项目的时候,每次请求时,需要传输参数给>>>服务器
* 参数信息,是公司内部需要的参数信息,是服务器规定的
* JSONObject jsonParam = new JSONObject();
* jsonParam.put("param1", param1);
* jsonParam.put("param2", param2);
* jsonParam.put("param3", param3);
* jsonParam.put("param4", param4);
* jsonParam.put("param5", param5);
* jsonParam.put("param6", param6);
*
* String jsonString = jsonParam.toString();
*/ try {
JSONObject jsonParam = new JSONObject();
/*jsonParam.put("param1", "");
jsonParam.put("param2", "");
jsonParam.put("param3", "");
jsonParam.put("param4", "");
jsonParam.put("param5", "");
jsonParam.put("param6", "");*/ // 注意⚠️:jsonString = null 当RequestBody.create(JSON, stringJSON);时会报错
String jsonString = null; /*jsonParam.toString()*/ ; okHttpEngine.postJSONRequest(PATH4, jsonString, new Callback() { @Override
public void onFailure(Call call, IOException e) {
Log.d("@@@", "call.toString:" + call.toString());
} @Override
public void onResponse(Call call, Response response) throws IOException {
// 获得网络数据
String result = response.body().string();
Log.d("@@@", "响应成功 call.toString:" + call.toString() + " result:" + result);
} }); }catch (Exception e) {
e.printStackTrace();
}
}
}
activity_my.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="普通Http Get 请求"
android:onClick="request1"
/> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="普通Http Post 请求"
android:onClick="request2"
/> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Post请求JSON数据1"
android:onClick="request3"
/> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Post请求JSON数据2 - okhttp异步"
android:onClick="request4"
/> </LinearLayout>
由于只有中国天气网地址:http://www.weather.com.cn ,所以不能对这个天气网服务器传参数(JSON jsonString),所以后面两个按钮就不点击测试了,它们是
Android-okhttp的更多相关文章
- Android okHttp网络请求之Json解析
前言: 前面两篇文章介绍了基于okHttp的post.get请求,以及文件的上传下载,今天主要介绍一下如何和Json解析一起使用?如何才能提高开发效率? okHttp相关文章地址: Android o ...
- Android okHttp网络请求之Get/Post请求
前言: 之前项目中一直使用的Xutils开源框架,从xutils 2.1.5版本使用到最近的xutils 3.0,使用起来也是蛮方便的,只不过最近想着完善一下app中使用的开源框架,由于Xutils里 ...
- Android okHttp网络请求之文件上传下载
前言: 前面介绍了基于okHttp的get.post基本使用(http://www.cnblogs.com/whoislcj/p/5526431.html),今天来实现一下基于okHttp的文件上传. ...
- Android okHttp网络请求之缓存控制Cache-Control
前言: 前面的学习基本上已经可以完成开发需求了,但是在项目中有时会遇到对请求做个缓存,当没网络的时候优先加载本地缓存,基于这个需求我们来学习一直okHttp的Cache-Control. okHttp ...
- Android okHttp网络请求之Retrofit+Okhttp+RxJava组合
前言: 通过上面的学习,我们不难发现单纯使用okHttp来作为网络库还是多多少少有那么一点点不太方便,而且还需自己来管理接口,对于接口的使用的是哪种请求方式也不能一目了然,出于这个目的接下来学习一下R ...
- Android OkHttp完全解析 --zz
参考文章 https://github.com/square/okhttp http://square.github.io/okhttp/ 泡网OkHttp使用教程 Android OkHttp完全解 ...
- Android OkHttp完全解析 是时候来了解OkHttp了
Android OkHttp完全解析 是时候来了解OkHttp了 标签: AndroidOkHttp 2015-08-24 15:36 316254人阅读 评论(306) 收藏 举报 分类: [an ...
- Android OkHttp文件上传与下载的进度监听扩展
http://www.loongwind.com/archives/290.html 上一篇文章介绍了用Retrofit实现文件的上传与下载,但是我们发现没办法监听上传下载的进度,毕竟我们在做开发的时 ...
- Android OkHttp与物理存储介质缓存:DiskLruCache(2)
Android OkHttp与物理存储介质缓存:DiskLruCache(2) 本文在附录文章8,9的基础之上,把Android OkHttp与DiskLruCache相结合,综合此两项技术,实 ...
- Android OkHttp(1)
Android OkHttp(1) OkHttp是一个流行的第三方开源网络请求框架,在目前的一些APP开发中比较流行.Android平台开源的网络请求框架不少,比如常见的Volley, Asyn ...
随机推荐
- Eclipse创建Spring项目 未完
使用的软件及版本 1)Eclipse:Eclipse Java EE IDE for Web Developers :Version: 2018-09 (4.9.0) 2)JDK:java versi ...
- Java SE EE ME用处
Java SE: 又称J2SE,开发部署桌面应用程序: Java EE:又称J2EE,开发网站 Java ME:是做手机APP开发 EE在SE基础上构建,提供web服务.组件模型.管理和通信API
- 事务ACID如何定义,事务隔离性解决的问题
挚享科技 2018.4.8 事务的四个特性: 1. 原子性: 同一个事务的多个操作,要么都成功,要么全部失败回滚. 2. 一致性: 事务必须确保数据库从一个一致性状态变换为另一个一致性状态. 其实就是 ...
- php file_get_contents 使用3法
<?php //GET function http_get($url, $params){ return file_get_contents($url.'?'.http_build_query( ...
- javascript声明对象时 带var和不带var的区别
2015/11/25补充: 关于变量声明这里有详细的解释: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Stat ...
- hibernate项目
http://blog.csdn.net/wzygis/article/details/22985751
- Time.fixedDeltaTime和Time.DeltaTime
在Update中使用 Time.deltaTime,获取到的是这一帧的时间,如果游戏卡,帧率低,那这个值就大.如果游戏流畅,帧率高,这个值就小,Time.deltaTime = 1.0f / 帧率 在 ...
- win10 VMware ubuntu12.04 虚拟机不能上网【已解决】
参考 :链接. 本机环境:Ubuntu 12.04 无线上网(连接手机热点). 主机:Win 10. 步骤1:VMware安装运行后,默认会有3个虚拟网络,VMnet0,VMnet1,VMnet8. ...
- vue 开发系列(五) 调用原生API
概要 我们在开发手机端程序的时候了,我们经常需要使用到拍照,二维码的功能.数字天堂公司提供了大量的原生API支持. http://www.html5plus.org/doc/ 实现 1.在hbuild ...
- MFC 消息框
窗口类能够使用messagebox int ret = MessageBox(_T("内容"), _T("标题"), MB_OKCANCLE| //MB_OB ...
前言: 前面两篇文章介绍了基于okHttp的post.get请求,以及文件的上传下载,今天主要介绍一下如何和Json解析一起使用?如何才能提高开发效率? okHttp相关文章地址: Android o ...
前言: 之前项目中一直使用的Xutils开源框架,从xutils 2.1.5版本使用到最近的xutils 3.0,使用起来也是蛮方便的,只不过最近想着完善一下app中使用的开源框架,由于Xutils里 ...
前言: 前面介绍了基于okHttp的get.post基本使用(http://www.cnblogs.com/whoislcj/p/5526431.html),今天来实现一下基于okHttp的文件上传. ...
前言: 前面的学习基本上已经可以完成开发需求了,但是在项目中有时会遇到对请求做个缓存,当没网络的时候优先加载本地缓存,基于这个需求我们来学习一直okHttp的Cache-Control. okHttp ...
前言: 通过上面的学习,我们不难发现单纯使用okHttp来作为网络库还是多多少少有那么一点点不太方便,而且还需自己来管理接口,对于接口的使用的是哪种请求方式也不能一目了然,出于这个目的接下来学习一下R ...
参考文章 https://github.com/square/okhttp http://square.github.io/okhttp/ 泡网OkHttp使用教程 Android OkHttp完全解 ...
Android OkHttp完全解析 是时候来了解OkHttp了 标签: AndroidOkHttp 2015-08-24 15:36 316254人阅读 评论(306) 收藏 举报 分类: [an ...
http://www.loongwind.com/archives/290.html 上一篇文章介绍了用Retrofit实现文件的上传与下载,但是我们发现没办法监听上传下载的进度,毕竟我们在做开发的时 ...
Android OkHttp与物理存储介质缓存:DiskLruCache(2) 本文在附录文章8,9的基础之上,把Android OkHttp与DiskLruCache相结合,综合此两项技术,实 ...
Android OkHttp(1) OkHttp是一个流行的第三方开源网络请求框架,在目前的一些APP开发中比较流行.Android平台开源的网络请求框架不少,比如常见的Volley, Asyn ...
使用的软件及版本 1)Eclipse:Eclipse Java EE IDE for Web Developers :Version: 2018-09 (4.9.0) 2)JDK:java versi ...
Java SE: 又称J2SE,开发部署桌面应用程序: Java EE:又称J2EE,开发网站 Java ME:是做手机APP开发 EE在SE基础上构建,提供web服务.组件模型.管理和通信API
挚享科技 2018.4.8 事务的四个特性: 1. 原子性: 同一个事务的多个操作,要么都成功,要么全部失败回滚. 2. 一致性: 事务必须确保数据库从一个一致性状态变换为另一个一致性状态. 其实就是 ...
<?php //GET function http_get($url, $params){ return file_get_contents($url.'?'.http_build_query( ...
2015/11/25补充: 关于变量声明这里有详细的解释: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Stat ...
http://blog.csdn.net/wzygis/article/details/22985751
在Update中使用 Time.deltaTime,获取到的是这一帧的时间,如果游戏卡,帧率低,那这个值就大.如果游戏流畅,帧率高,这个值就小,Time.deltaTime = 1.0f / 帧率 在 ...
参考 :链接. 本机环境:Ubuntu 12.04 无线上网(连接手机热点). 主机:Win 10. 步骤1:VMware安装运行后,默认会有3个虚拟网络,VMnet0,VMnet1,VMnet8. ...
概要 我们在开发手机端程序的时候了,我们经常需要使用到拍照,二维码的功能.数字天堂公司提供了大量的原生API支持. http://www.html5plus.org/doc/ 实现 1.在hbuild ...
窗口类能够使用messagebox int ret = MessageBox(_T("内容"), _T("标题"), MB_OKCANCLE| //MB_OB ...