android okGo、okHttp、XUtils网络框架使用

2024-06-04 21:38

本文主要是介绍android okGo、okHttp、XUtils网络框架使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

代码结构


一、XUtils网络框架使用

1、先导入xutils的library库,然后在build.gradle中添加下面代码

 //xutilscompile project(':xutils')

2、需要先在Application中初始化

 x.Ext.init(this);x.Ext.setDebug(BuildConfig.DEBUG); // 是否输出debug日志, 开启debug会影响性能.
3、实现请求普通数据

 /*** XUtils普通数据请求**/public void xUtilsOrdinary(){RequestParams params = new RequestParams(Api.TEST_URL);x.http().get(params, new Callback.CommonCallback<String>() {@Overridepublic void onSuccess(String result) {ixUtilsPresenter.XUtilsSuccess(result);}@Overridepublic void onError(Throwable ex, boolean isOnCallback) {ixUtilsPresenter.XUtilsError(ex.getMessage());}@Overridepublic void onCancelled(CancelledException cex) {}@Overridepublic void onFinished() {}});

4、view代码

package com.example.apple.http.presenter;import android.graphics.drawable.Drawable;/*** Created by apple on 17/3/20.*/public interface IXUtilsPresenter {/*** 网络请求错误* @param msg*/void XUtilsError(String msg);/*** 网络请求成功* @param msg*/void XUtilsSuccess(String msg);/*** 返回图片数据* @param bitmap*/void XUtilsBitmap(Drawable bitmap);
}

二、okHttp网络框架使用,这里主要实现简单的数据请求、bitamap图片请求、文件下载功能,推荐使用

1、先在build.gradle中添加

//okhttpcompile 'com.squareup.okhttp:okhttp:2.6.0'compile 'com.zhy:okhttputils:2.6.2'compile 'com.squareup.okio:okio:1.6.0'
2、实现代码

package com.example.apple.http.presenter;import android.content.Context;
import android.graphics.Bitmap;
import android.os.Environment;import com.example.apple.http.utils.Api;
import com.zhy.http.okhttp.OkHttpUtils;
import com.zhy.http.okhttp.callback.BitmapCallback;
import com.zhy.http.okhttp.callback.FileCallBack;import java.io.File;import okhttp3.Call;/*** Created by apple on 17/3/20.*/public class OkHttpPresenter {private Context context;private IOkHttpPresenter iOkHttpPresenter;public OkHttpPresenter(Context context, IOkHttpPresenter iOkHttpPresenter) {this.context = context;this.iOkHttpPresenter = iOkHttpPresenter;}/*** okHttp网络请求*/public void okHttp(){OkHttpUtils.get().url(Api.TEST_URL).id(100).build().execute(new com.zhy.http.okhttp.callback.StringCallback() {@Overridepublic void onError(Call call, Exception e, int id) {iOkHttpPresenter.okError(e.getMessage());}@Overridepublic void onResponse(String response, int id) {iOkHttpPresenter.okSuccess(response);}});}/*** 请求网络图片*/public void okHttpBitmap(){OkHttpUtils.get().url(Api.TEST_BITMAP_URL).tag(this).build().execute(new BitmapCallback() {@Overridepublic void onError(Call call, Exception e, int id) {iOkHttpPresenter.okError(e.getMessage());}@Overridepublic void onResponse(Bitmap response, int id) {iOkHttpPresenter.okBitmap(response);}});}/*** 请求文件*/public void okHttpFile(){OkHttpUtils.get().url(Api.TEST_FILE_URL).tag(this).build().execute(new FileCallBack("/sdcard/temp/", "file.rar") {文件下载时,需要指定下载的文件目录和文件名@Overridepublic void onError(Call call, Exception e, int id) {iOkHttpPresenter.okError(e.getMessage());}@Overridepublic void onResponse(File response, int id) {iOkHttpPresenter.okFile(response);}});}}

3、view代码

package com.example.apple.http.presenter;import android.graphics.Bitmap;import java.io.File;/*** Created by apple on 17/3/20.*/public interface IOkHttpPresenter {/*** 请求成功* @param msg*/void okSuccess(String msg);/*** 请求错误* @param msg*/void okError(String msg);/*** 请求网络图片* @param bitmap*/void okBitmap(Bitmap bitmap);/*** 请求文件* @param msg*/void okFile(File msg);}

三、okGo使用,推荐使用

1、先在build.gradle中添加

//okGocompile 'com.lzy.net:okgo:+'        //版本号使用 + 可以自动引用最新版compile 'com.lzy.net:okrx:+'        //RxJava扩展支持 基于RxJava和RxAndroid的扩展,如果不需要可以不必引入compile 'com.lzy.net:okserver:+'    //下载管理和上传管理扩展

2、在application中添加

 //---------这里给出的是示例代码,告诉你可以这么传,实际使用的时候,根据需要传,不需要就不传-------------//HttpHeaders headers = new HttpHeaders();headers.put("commonHeaderKey1", "commonHeaderValue1");    //header不支持中文headers.put("commonHeaderKey2", "commonHeaderValue2");HttpParams params = new HttpParams();params.put("commonParamsKey1", "commonParamsValue1");     //param支持中文,直接传,不要自己编码params.put("commonParamsKey2", "这里支持中文参数");//-----------------------------------------------------------------------------------////必须调用初始化OkGo.init(this);//以下设置的所有参数是全局参数,同样的参数可以在请求的时候再设置一遍,那么对于该请求来讲,请求中的参数会覆盖全局参数//好处是全局参数统一,特定请求可以特别定制参数try {//以下都不是必须的,根据需要自行选择,一般来说只需要 debug,缓存相关,cookie相关的 就可以了OkGo.getInstance()//打开该调试开关,控制台会使用 红色error 级别打印log,并不是错误,是为了显眼,不需要就不要加入该行.debug("OkGo")//如果使用默认的 60秒,以下三行也不需要传.setConnectTimeout(OkGo.DEFAULT_MILLISECONDS)  //全局的连接超时时间.setReadTimeOut(OkGo.DEFAULT_MILLISECONDS)     //全局的读取超时时间.setWriteTimeOut(OkGo.DEFAULT_MILLISECONDS)    //全局的写入超时时间//可以全局统一设置缓存模式,默认是不使用缓存,可以不传,具体其他模式看 github 介绍 https://github.com/jeasonlzy/.setCacheMode(CacheMode.NO_CACHE)//可以全局统一设置缓存时间,默认永不过期,具体使用方法看 github 介绍.setCacheTime(CacheEntity.CACHE_NEVER_EXPIRE)//如果不想让框架管理cookie,以下不需要
//                .setCookieStore(new MemoryCookieStore())                //cookie使用内存缓存(app退出后,cookie消失).setCookieStore(new PersistentCookieStore())          //cookie持久化存储,如果cookie不过期,则一直有效//可以设置https的证书,以下几种方案根据需要自己设置,不需要不用设置
//                    .setCertificates()                                  //方法一:信任所有证书
//                    .setCertificates(getAssets().open("srca.cer"))      //方法二:也可以自己设置https证书
//                    .setCertificates(getAssets().open("aaaa.bks"), "123456", getAssets().open("srca.cer"))//方法三:传入bks证书,密码,和cer证书,支持双向加密//可以添加全局拦截器,不会用的千万不要传,错误写法直接导致任何回调不执行
//                .addInterceptor(new Interceptor() {
//                    @Override
//                    public Response intercept(Chain chain) throws IOException {
//                        return chain.proceed(chain.request());
//                    }
//                })//这两行同上,不需要就不要传.addCommonHeaders(headers)                                         //设置全局公共头.addCommonParams(params);                                          //设置全局公共参数} catch (Exception e) {e.printStackTrace();}

3、实现代码

package com.example.apple.http.presenter;import android.content.Context;
import android.graphics.Bitmap;import com.example.apple.http.utils.Api;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.cache.CacheMode;
import com.lzy.okgo.callback.BitmapCallback;
import com.lzy.okgo.callback.FileCallback;
import com.lzy.okgo.callback.StringCallback;
import com.lzy.okgo.model.HttpParams;
import com.lzy.okgo.request.BaseRequest;import org.json.JSONObject;import java.io.File;
import java.util.HashMap;import okhttp3.Call;
import okhttp3.Response;/*** Created by apple on 17/3/20.*/public class HttpPresenter {private Context context;private IHttpView iHttpView;private final String TAG = "HttpPresenter";public HttpPresenter(Context context, IHttpView iHttpView) {this.context = context;this.iHttpView = iHttpView;}/*** okgo 普通网络请求*/public void okGoOrdinary() {OkGo.get(Api.TEST_URL)     // 请求方式和请求url.tag(this)                       // 请求的 tag, 主要用于取消对应的请求.cacheKey("cacheKey")            // 设置当前请求的缓存key,建议每个不同功能的请求设置一个.cacheMode(CacheMode.DEFAULT)    // 缓存模式,详细请看缓存介绍.execute(new StringCallback() {/*** 网络请求成功* @param s* @param call* @param response*/@Overridepublic void onSuccess(String s, Call call, Response response) {// s 即为所需要的结果iHttpView.httpSuccess("网络请求成功!");iHttpView.httpData(response);}/*** 网络请求错误* @param call* @param response* @param e*/@Overridepublic void onError(Call call, Response response, Exception e) {super.onError(call, response, e);iHttpView.httpError(e.getMessage());}});}/*** 请求下载网络图片*/public void okGoBitmap() {OkGo.get(Api.TEST_BITMAP_URL).tag(this)//.execute(new BitmapCallback() {@Overridepublic void onSuccess(Bitmap bitmap, Call call, Response response) {// bitmap 即为返回的图片数据iHttpView.httpSuccess("数据返回成功");iHttpView.httpBitmap(bitmap);}@Overridepublic void onError(Call call, Response response, Exception e) {super.onError(call, response, e);iHttpView.httpError(e.getMessage());}});}/*** 请求文件下载*/public void okGoFile(){OkGo.get(Api.TEST_FILE_URL)//.tag(this)//.execute(new FileCallback("file.jpg") {  //文件下载时,需要指定下载的文件目录和文件名@Overridepublic void onSuccess(File file, Call call, Response response) {// file 即为文件数据,文件保存在指定目录iHttpView.httpSuccess("数据返回成功");}@Overridepublic void downloadProgress(long currentSize, long totalSize, float progress, long networkSpeed) {//这里回调下载进度(该回调在主线程,可以直接更新ui)iHttpView.httpFileProgress(progress);}});}

4、view代码实现

package com.example.apple.http.presenter;import android.graphics.Bitmap;import okhttp3.Response;/*** Created by apple on 17/3/20.*/public interface IHttpView {/*** 网络请求错误* @param msg*/void httpError(String msg);/*** 网络请求成功* @param msg*/void httpSuccess(String msg);/*** 网络请求返回的数据* @param msg*/void httpData(Response msg);/*** 返回的图片数据* @param bitmap*/void httpBitmap(Bitmap bitmap);/***  下载进度* @param progress*/void httpFileProgress(float progress);
}
四、请求的url,文件图片等可以自己到七牛注册一个帐号,然后上传上去,拿来测试

package com.example.apple.http.utils;/*** Created by apple on 17/3/20.*/public class Api {public static final String TEST_URL = "http://112.124.22.238:8081/course_api/wares/hot?pageSize=10&curPage=1";public static final String TEST_BITMAP_URL = "http://7mno4h.com2.z0.glb.qiniucdn.com/s_recommend_55c1e8f7N4b99de71.jpg";public static final String TEST_FILE_URL = "http://omoml61n3.bkt.clouddn.com/Android%E5%BA%94%E7%94%A8%E6%BA%90%E7%A0%81%E9%9F%B3%E4%B9%90%E5%AE%9E%E6%97%B6%E8%B7%B3%E5%8A%A8%E9%A2%91%E8%B0%B1%E6%98%BE%E7%A4%BA.rar";
}
五、app的布局代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="com.example.apple.http.activity.MainActivity"><Buttonandroid:id="@+id/okgo"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="okgo" /><Buttonandroid:id="@+id/XUtils"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="XUtils" /><Buttonandroid:id="@+id/volley"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="volley" /><Buttonandroid:id="@+id/okHttp"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="okHttp" /><ImageViewandroid:id="@+id/image"android:layout_width="wrap_content"android:layout_height="wrap_content" />
</LinearLayout>
mainActivity实现代码

package com.example.apple.http.activity;import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;import com.example.apple.http.R;
import com.example.apple.http.presenter.HttpPresenter;
import com.example.apple.http.presenter.IHttpView;
import com.example.apple.http.presenter.IOkHttpPresenter;
import com.example.apple.http.presenter.IXUtilsPresenter;
import com.example.apple.http.presenter.OkHttpPresenter;
import com.example.apple.http.presenter.XUtilsPresenter;
import com.lzy.okgo.OkGo;import java.io.File;import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import okhttp3.Response;public class MainActivity extends AppCompatActivity implements IHttpView ,IOkHttpPresenter,IXUtilsPresenter{/*** http://blog.csdn.net/u011324501/article/details/53933212 volley使用*/@BindView(R.id.okgo)Button okgo;@BindView(R.id.XUtils)Button XUtils;@BindView(R.id.volley)Button volley;@BindView(R.id.okHttp)Button okHttp;@BindView(R.id.image)ImageView image;private HttpPresenter httpPresenter;private final String TAG = "MainActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ButterKnife.bind(this);httpPresenter = new HttpPresenter(this, this);}@OnClick({R.id.okgo, R.id.XUtils, R.id.volley, R.id.okHttp})public void onClick(View view) {switch (view.getId()) {case R.id.okgo://okGohttpPresenter.okGoOrdinary();//普通数据请求// httpPresenter.okGoBitmap();//网络图片请求//httpPresenter.okGoFile();//网络文件下载break;case R.id.XUtils://XUtilsXUtilsPresenter xUtilsPresenter = new XUtilsPresenter(this,this);xUtilsPresenter.xUtilsOrdinary();// xUtilsPresenter.xUtilsBitmap();break;case R.id.volley:break;case R.id.okHttp://okHttpOkHttpPresenter okHttpPresenter = new OkHttpPresenter(this,this);//okHttpPresenter.okHttp();// okHttpPresenter.okHttpBitmap();okHttpPresenter.okHttpFile();break;}}@Overridepublic void httpError(String msg) {Toast.makeText(getApplication(), "msg=" + msg, Toast.LENGTH_SHORT).show();}@Overridepublic void httpSuccess(String msg) {Toast.makeText(getApplication(), msg, Toast.LENGTH_SHORT).show();}@Overridepublic void httpData(Response msg) {Log.e(TAG, "msg=" + msg);}@Overridepublic void httpBitmap(Bitmap bitmap) {image.setImageBitmap(bitmap);}@Overridepublic void httpFileProgress(float progress) {okgo.setText(progress * 100 + "%");if (progress == 1.0) {okgo.setText("okGo");}}@Overrideprotected void onDestroy() {super.onDestroy();//根据 Tag 取消请求OkGo.getInstance().cancelTag(this);}/*** okHttp* @param msg*/@Overridepublic void okSuccess(String msg) {Toast.makeText(getApplication(), "msg=" + msg, Toast.LENGTH_SHORT).show();}/*** okHttp* @param msg*/@Overridepublic void okError(String msg) {Toast.makeText(getApplication(), "msg=" + msg, Toast.LENGTH_SHORT).show();}@Overridepublic void okBitmap(Bitmap bitmap) {image.setImageBitmap(bitmap);}@Overridepublic void okFile(File msg) {Toast.makeText(getApplication(), "msg=" + msg.getName(), Toast.LENGTH_SHORT).show();}@Overridepublic void XUtilsError(String msg) {Toast.makeText(getApplication(), "msg=" + msg, Toast.LENGTH_SHORT).show();}@Overridepublic void XUtilsSuccess(String msg) {Toast.makeText(getApplication(), "msg=" + msg, Toast.LENGTH_SHORT).show();}@Overridepublic void XUtilsBitmap(Drawable bitmap) {image.setImageDrawable(bitmap);}
}

最后记得加上权限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.apple.http"><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.INTERNET" /><applicationandroid:allowBackup="true"android:name=".MyApplication"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".activity.MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>


okgo使用详解:http://www.jianshu.com/p/4c17956fe3b4

okhttp使用详解:http://blog.csdn.net/lmj623565791/article/details/47911083

volley使用:http://blog.csdn.net/u011324501/article/details/53933212

xUtils详细使用:自己找

demo代码:http://download.csdn.net/detail/u011324501/9787917

这篇关于android okGo、okHttp、XUtils网络框架使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1031193

相关文章

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

Pandas使用SQLite3实战

《Pandas使用SQLite3实战》本文主要介绍了Pandas使用SQLite3实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1 环境准备2 从 SQLite3VlfrWQzgt 读取数据到 DataFrame基础用法:读

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤

Java中StopWatch的使用示例详解

《Java中StopWatch的使用示例详解》stopWatch是org.springframework.util包下的一个工具类,使用它可直观的输出代码执行耗时,以及执行时间百分比,这篇文章主要介绍... 目录stopWatch 是org.springframework.util 包下的一个工具类,使用它

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

springboot security使用jwt认证方式

《springbootsecurity使用jwt认证方式》:本文主要介绍springbootsecurity使用jwt认证方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录前言代码示例依赖定义mapper定义用户信息的实体beansecurity相关的类提供登录接口测试提供一

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为