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

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影