`

okhttp的学习与简单使用

阅读更多
官方地址:https://github.com/square/okhttp/
一个处理网络请求的开源项目,是安卓端最火热的轻量级框架
 <dependency>
     <groupId>com.squareup.okhttp3</groupId>
     <artifactId>okhttp</artifactId>
     <version>3.10.0</version>
  </dependency>
    


简单测试okhttp Get请求
package com.sb.okhttp.okhttp;

import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class Test {
	// 创建OkhttpClient对象
	OkHttpClient client = new OkHttpClient();
	
	/**
	 * okhttp get 同步请求
	 */
	public void testGet(String url) {
		Request request = new Request.Builder().get().url(url) // 请求地址
				.build();// 创建Request对象、
		Response response = null;
		try {
			// 执行请求并获取Response对象
			response = client.newCall(request).execute();
		} catch (IOException e) {
			e.printStackTrace();
		}
		if (null != response) {
			if (response.isSuccessful()) {// 请求成功
				System.out.println(response.code());// 状态码
				System.out.println(response.message());// message
				try {
					String res = response.body().string();
					System.out.println(res);
				} catch (IOException e) {
					e.printStackTrace();
				}
			} else {
				System.out.println("请求失败");
			}
		} else {
			System.out.println("请求失败");
		}
	}
	
	/**
	 * okhttp get 异步请求
	 */
	public void asynchronousGet(String url){
		Request request = new Request.Builder().get().url(url) // 请求地址
				.build();// 创建Request对象
		client.newCall(request).enqueue(new Callback() {
			public void onResponse(Call arg0, Response response) throws IOException {
				//注:onResponse 回调会在子线程中执行,而不是主线程
				if (response.isSuccessful()) {// 请求成功
					System.out.println(response.code());// 状态码
					System.out.println(response.message());// message
					try {
						String res = response.body().string();
						System.out.println(res);
					} catch (IOException e) {
						e.printStackTrace();
					}
				} else {
					System.out.println("请求失败");
				}
			}
			//注:onFailure 回调会在子线程中执行,而不是主线程
			public void onFailure(Call arg0, IOException arg1) {
				System.out.println("请求失败");
			}
			
		});
	}
	
	public static void main(String[] args) {
		Test t = new Test();
		String url = "http://www.baidu.com";
		//t.testGet(url);
		t.asynchronousGet(url);
	}
}



测试okhttp Post请求
package com.sb.okhttp.okhttp;

import java.io.File;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class TestPost {
	//数据类型json
	public static final MediaType mediaType = MediaType.parse("application/json;charset=utf-8");
	//数据类型File
	public static final MediaType mediaType_file = MediaType.parse("File/*");
	
	OkHttpClient client = new OkHttpClient();
	
	/**
	 * Post提交Json数据
	 * @param url   提交的地址
	 * @param json  提交啊的json数据
	 * @return  返回post之后返回的结果数据
	 */
	public String postJson(String url,String json){
		RequestBody body = RequestBody.create(mediaType,json);
		Request request = new Request.Builder().url(url).post(body).build();
		Response response = null;
		try {
			response = client.newCall(request).execute();
			if(null!=response){
				if(response.isSuccessful()){
					return response.body().string();
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * okhttp  模拟表单提交
	 * @param url post的地址
	 */
	public void postKeyValue(String url ){
		FormBody.Builder formBody = new FormBody.Builder();//创建表单请求体
		formBody.add("name","zbb");
		formBody.add("age","26");
		Request request = new Request.Builder()   //创建请求对象
		                  .url(url)
		                  .post(formBody.build()) //传递请求体
		                  .build();
		client.newCall(request).enqueue(new Callback() {
			public void onResponse(Call call, Response res) throws IOException {
				//请求成功响应后回调
				if(res.isSuccessful()){
					String result = res.body().string();
					System.out.println(result);
				}
			}
			
			public void onFailure(Call call, IOException arg1) {
				//请求失败后回调
				//....此处代码省略
			}
		});
	}
	
	/**
	 * okhttp 上传File对象
	 * @param filePath  file路径
	 * @param url 提交到的地址
	 */
	public void postFile(String filePath,String url){
		File file = new File(filePath);
		RequestBody body = RequestBody.create(mediaType_file,file);
		Request request = new Request.Builder()
							.url(url)
							.post(body)
							.build();
	    client.newCall(request).enqueue(new Callback() {
			public void onResponse(Call arg0, Response arg1) throws IOException {
				//请求成功响应后的回调
				//.....
			}
			
			public void onFailure(Call arg0, IOException arg1) {
				//请求失败后的回调
				//.....
			}
		});
	}
	
	/**
	 * okhttp post 既传递表单参数也提交File
	 * @param file 文件对象
	 * @param url 提交到的地址
	 */
	public void postMultipartBody(File file,String url){
		MultipartBody body = new MultipartBody.Builder()
		                     .setType(MultipartBody.FORM)
		                     .addFormDataPart("name","zbb")
		                     .addFormDataPart("age","26")
		                     .addFormDataPart("f",file.getName(),
		                    		 RequestBody.create(mediaType_file,file))
		                     .build();
		Request request = new Request.Builder()
		                  .url(url)
		                  .post(body)
		                  .build();
		client.newCall(request).enqueue(new Callback() {
			public void onResponse(Call arg0, Response arg1) throws IOException {
				//请求成功响应后的回调
				//.....
			}
			
			public void onFailure(Call arg0, IOException arg1) {
				//请求失败后的回调
				//.....
			}
		});
	}
	
	public static void main(String[] args) {
		
	}
    
}

分享到:
评论

相关推荐

    android OkHttp学习以及使用例子

    一、OkHttp的基本概念与优势 1. OkHttp的核心理念是通过复用TCP连接来减少网络延迟,提高网络请求的效率。它实现了HTTP/1.1和HTTP/2协议,支持连接池、自动重试、压缩响应数据等特性。 2. OkHttp提供了一个简洁的API...

    OKHttp的使用Demo

    **OKHttp简介** OKHttp是Square公司开源的一款高效、易用的HTTP客户端库,它旨在通过减少网络延迟和减少内存消耗来改善Android...通过学习和使用OKHttp,开发者可以更有效地实现网络通信,提升应用的性能和用户体验。

    Retrofit+Okhttp 使用 Eclipse版

    你可以通过下载并研究这个项目,学习如何在不使用Android Studio的情况下,成功地集成和使用Retrofit+Okhttp。 总之,Retrofit+Okhttp组合提供了一种高效、简洁的网络请求解决方案,无论是在Android Studio还是...

    Android retrofit+rxjava+okhttp 学习案例

    在Android开发中,Retrofit、RxJava和OkHttp...总的来说,"Android retrofit+rxjava+okhttp"的学习对于Android开发者来说是提高生产力的重要步骤。通过深入理解和实践,可以大大提升网络请求部分的代码质量和可维护性。

    鸿洋大神的OkHttp源码,可导入直接使用

    《鸿洋大神的OkHttp源码解析及应用》 ...通过学习和使用这份源码,我们可以更高效地利用OkHttp,提升应用的网络性能,实现更加精细的网络请求控制。无论是对于初学者还是经验丰富的开发者,这都是一份宝贵的参考资料。

    okhttp使用

    使用OkHttp进行GET请求非常简单。首先,我们需要创建一个`OkHttpClient`实例,这是OkHttp的核心组件,负责管理网络连接和缓存策略。例如: ```java OkHttpClient client = new OkHttpClient(); ``` 然后,构建...

    Android开发 okhttp网络请求使用demo,包括上传文件方法封装

    总结来说,"Android开发 okhttp网络请求使用demo"是一个实用的学习资源,它涵盖了OkHttp的基础用法和文件上传。通过对这个demo的深入学习,开发者可以更好地理解和运用OkHttp来优化Android应用的网络性能。

    okHttp封装库 Eclipse版本

    OkHttp 是一个高效的 HTTP 客户端库,由 Square ...总的来说,OkHttp 封装库为开发者提供了高效、易用的网络请求解决方案,通过学习和使用这个库,你可以提升你的 Android 应用程序的网络性能,并更好地处理网络请求。

    Android网络请求OkHttp的使用demo代码

    本篇将详细讲解如何在Android中使用OkHttp进行网络请求,并提供一个简单的Demo代码。 首先,理解OkHttp的核心优势:它提供了缓存机制,减少了不必要的网络请求;支持HTTP/2和SPDY协议,能有效减少网络延迟;并且...

    学会Retrofit+OkHttp+RxAndroid三剑客的使用,让自己紧跟Android潮流的步伐

    总的来说,掌握Retrofit、OkHttp和RxAndroid的使用,不仅可以让你的Android应用拥有更高效的网络通信能力,还能让你的代码结构更加清晰,易于维护。在实际开发中,这些技术的综合运用能帮助你构建出更加出色的应用。...

    用okhttp实现webSocket长连接

    以下是一个简单的示例代码,展示了如何使用OkHttp建立WebSocket连接: ```java import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.WebSocket; import okhttp3.WebSocketListener; public ...

    Okhttp3+MVP

    通过阅读《Android Okhttp3+MVP简单实战》这篇文章,你将学习如何在Android应用中集成OkHttp3,创建Presenter来封装网络请求,以及如何在MVP模式下处理网络数据。同时,项目中的"OkhttpMVP"文件可能包含了实现这些...

    okhttp3.10.0.jar

    5. **简洁的 API**:OkHttp 的 API 设计简单直观,使得开发者能够轻松地构建网络请求。 6. **性能优化**:OkHttp 使用高效的字节缓冲,减少了内存拷贝,提高了数据传输效率。 7. **安全支持**:OkHttp 支持 TLS ...

    OkHttp简单封装,支持进度UI线程回调

    通过这个项目,开发者可以学习如何有效地整合OkHttp和Gson,实现网络请求、文件上传和下载,以及如何在Android中处理UI线程的回调。这对于提升Android应用的网络功能和用户体验具有重要的实践价值。

    xamarin学习笔记A16(安卓OkHttp3和HttpURLConnection)下

    4. **简洁API**:OkHttp3提供了一套直观且易用的API,使得网络请求的编写变得简单。 5. **拦截器**:通过拦截器,开发者可以自定义请求和响应处理,实现日志记录、认证等功能。 接下来是HttpURLConnection,它是...

    okhttp多文件上传

    OkHttp是由Square公司开发的一个HTTP客户端库,它提供了一个简单、高效且强大的接口来处理网络请求。OkHttp通过缓存响应、连接池和线程安全的架构,显著提高了网络请求的速度和效率。 二、多文件上传原理 多文件...

    安卓okhttp3模拟网页登录demo

    这个标题暗示了我们将会学习如何利用OkHttp3来处理HTTP的POST请求,这对于任何需要与服务器交互,如登录、注册等场景的应用都是至关重要的。 【描述】"对应博客地址:...

    高度封装的OkHttp

    **正文** OkHttp是Java和Android平台上广泛使用的网络请求库,由Square公司开发并维护。..."高度封装的OkHttp"指的是OkHttp库在设计时充分...通过学习和掌握OkHttp的使用,可以显著提升开发效率,优化应用的网络性能。

    一个用于Java应用(非安卓)的OkHttp的简单封装

    使用这样一个封装库,开发者可以避免直接与OkHttp的复杂API打交道,减少出错的可能性,同时提高代码的可读性和可维护性。例如,通过调用封装库提供的方法,一个简单的GET请求可能只需要一行代码就能完成。 ```java ...

    使用OKhttp,Rxjava封装的mvp模式架构

    本项目使用MVP模式,结合了OKHttp和RxJava这两款强大的库,旨在提供一个简单易懂的数据请求解决方案。 **MVP模式详解:** MVP模式主要由三部分组成: 1. **Model(模型)**:负责处理业务逻辑和数据获取,与数据源...

Global site tag (gtag.js) - Google Analytics