Android网路编程之okhttp项目中封装使用,'com.zhy:okhttputils:2.6.2'基础上再封装MyOkhttpUtils

OkHttpUtils 下载上传文件 android 下载和上传 文件 阅读详情
AI摘要

本文详细介绍了在Android项目中如何封装鸿洋的OkHttpUtils库,实现优雅的网络请求处理。包括集成步骤、自定义OkHttpClient、创建MyOkhttpUtils工具类、处理请求响应、错误提示、文件上传下载等功能。

一.使用场景,及业务需求

      在Android项目开发中,为了让你的App能够连接后台服务器获取后台数据,在数据加载过程中弹出相应的"正在加载...."提示语,在网络或者服务器异常时请求失败弹出"加载失败,请重新请求",

二.写这篇博客原因

     com.zhy:okhttputils:2.6.2'这个可以依赖的项目是Android大神鸿洋封装好的一个网络请求框架,我们可以把它集成到我们的项目中,为了更方便的使用它,我们需要在这个框架的基础上自定义MyOkhttpUtils再次封装,使我们的代码更优雅.

三.集成鸿洋的这个框架

  1.在Android工程目录下的build.gradle文件中依赖

//okhttp3
implementation 'com.squareup.okhttp3:mockwebserver:3.11.0'
implementation 'com.squareup.okio:okio:2.0.0'
//鸿洋okhttputils
implementation 'com.zhy:okhttputils:2.6.2'

  2.自定义MyApplication配置OkhttpClient

public class MyApplication extends Application
{   
    @Override
    public void onCreate()
    {
        super.onCreate();

        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                  .addInterceptor(new LoggerInterceptor("TAG"))
                  .connectTimeout(10000L, TimeUnit.MILLISECONDS)
                  .readTimeout(10000L, TimeUnit.MILLISECONDS)
                  //其他配置
                 .build();

        OkHttpUtils.initClient(okHttpClient);
    }

}
 private void okhttpint(){
        // 对Coolies进行持久化操作
        final ClearableCookieJar cookieJar1 = new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(getApplicationContext()));
        // 对https支持,参数分别为:证书的inputstream 本地证书的inputstream 本地证书的密码
        // 当前配置可以访问任何https网站
        HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory(null, null, null);
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .connectTimeout(10000L, TimeUnit.MILLISECONDS) // 连接超时时间
                .readTimeout(10000L, TimeUnit.MILLISECONDS) // 读取超时时间
                .addInterceptor(new LoggerInterceptor("TAG"))
                .cookieJar(cookieJar1)
                .sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager)
//                .sslSocketFactory(createSSLSocketFactory())
//                .hostnameVerifier(new TrustAllHostnameVerifier())
                .build();
        OkHttpUtils.initClient(okHttpClient);
    }

注意记得在清单文件中配置Application和网络权限

3.在工具类包下创建MyOkhttpUtils

public class MyOkhttpUtils {
    public static final String TYPE_TXT = "txt";
    public static final String TYPE_XLS = "xls";
    public static final String TYPE_DOC = "doc";
    public String sError = "网络连接失败";

    public static void getRequest(String url, final OnRequestNetWorkListener mListener) {
        OkHttpUtils
                .get()
                .url(url)
                .build()
                .execute(new StringCallback() {
                    @Override
                    public void onError(Call call, Exception e, int id) {
                        mListener.notOk(e.getMessage());
                        DialogUtils.getInstance().dismiss();
                    }

                    @Override
                    public void onResponse(String response, int id) {
                        mListener.ok(response);
                        DialogUtils.getInstance().dismiss();
                    }
                });
    }


    public static void postRequest(String url, HashMap<String, String> params, final OnRequestNetWorkListener listener) {

        PostFormBuilder builder = OkHttpUtils.post().url(url);

        Iterator<Map.Entry<String, String>> iterator = params.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry entry = iterator.next();
            String key = (String) entry.getKey();
            String value = (String) entry.getValue();
            builder.addParams(key, value);
        }

        builder.build().execute(new StringCallback() {
            @Override
            public void onError(Call call, Exception e, int id) {
                listener.notOk(e.getMessage());
                DialogUtils.getInstance().dismiss();
            }

            @Override
            public void onResponse(String response, int id) {
                listener.ok(response);
                DialogUtils.getInstance().dismiss();
            }
        });
    }

    /*
    * 传输文件用这个
    * */
    public static void postRequestFile(String url, ArrayList<File> arrayListFile, String fileParameter, HashMap<String, String> params, final OnRequestNetWorkListener listener) {
        PostFormBuilder builder = OkHttpUtils.post().url(url);

        Iterator<Map.Entry<String, String>> iterator = params.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry entry = iterator.next();
            String key = (String) entry.getKey();
            String value = (String) entry.getValue();
            builder.addParams(key, value);
        }
        if (arrayListFile.size() == 0) { //如果是空新建空文件
            //新建一个File类型的成员变量,传入文件名路径。
            File file = new File("/mnt/sdcard/wlgj.txt");
            //判断文件是否存在,存在就删除
            if (file.exists()) {
                file.delete();
            }
            try {
                //创建文件
                file.createNewFile();
                //给一个吐司提示,显示创建成功
            } catch (IOException e) {
                e.printStackTrace();
            }
            builder.addFile(fileParameter, file.getName(), file); //调用 addFile 方法上传文件
        } else {
            for (int i = 0; i < arrayListFile.size(); i++) { //遍历存储文件的集合
                File file = arrayListFile.get(i);
                builder.addFile(fileParameter, file.getName(), file); //调用 addFile 方法上传文件
            }
        }

        builder.build().execute(new StringCallback() {
            @Override
            public void onError(Call call, Exception e, int id) {
                listener.notOk(e.getMessage());
                DialogUtils.getInstance().dismiss();
            }

            @Override
            public void onResponse(String response, int id) {
                listener.ok(response);
                DialogUtils.getInstance().dismiss();
            }
        });
    }

    /*
    * 一个页面有两个 DialogUtils.getInstance().dismiss(); 会冲突
    * 物资供应看板三级界面
    * */
    public static void postRequestNoDialog(String url, HashMap<String, String> params, final OnRequestNetWorkListener listener) {

        PostFormBuilder builder = OkHttpUtils.post().url(url);

        Iterator<Map.Entry<String, String>> iterator = params.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry entry = iterator.next();
            String key = (String) entry.getKey();
            String value = (String) entry.getValue();
            builder.addParams(key, value);
        }

        builder.build().execute(new StringCallback() {
            @Override
            public void onError(Call call, Exception e, int id) {
                listener.notOk(e.getMessage());
            }

            @Override
            public void onResponse(String response, int id) {
                listener.ok(response);
            }
        });
    }


    /**
     * 下载文件
     */
    public void downloadFile(final List<String> pathList, List<String> title, final int postion, final Context context) {
        // 为RequestParams设置文件下载后的保存路径
        String url = pathList.get(postion);
        System.out.println("文件下载:" + url);

        final String savePath = FilePathUtils.init(context).getFileSaveDir().getAbsolutePath() + url.substring(url.lastIndexOf("/"), url.length());
        System.out.println("savePath:" + savePath);
        HttpUtils utils = new HttpUtils();
        utils.download(url, savePath, true, false, new RequestCallBack<File>() {
            @Override
            public void onSuccess(ResponseInfo<File> responseInfo) {
                Log.d("=====", "=====a下载成功======");
                if (pathList.get(postion).contains(TYPE_TXT)) {
                    Intent intent = new Intent();
                    File file = new File(savePath);
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    intent.setAction(Intent.ACTION_VIEW);
                    intent.setDataAndType(Uri.fromFile(file), ".txt");
                    try {
                        context.startActivity(intent);
                    } catch (ActivityNotFoundException e) {
                        Toast.makeText(context, "您没有安装打开此文件的软件,请安装后再次打开", Toast.LENGTH_SHORT).show();
                    }
                } else if (pathList.get(postion).contains(TYPE_XLS)) {
                    Intent intent = new Intent();
                    File file = new File(savePath);
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    intent.setAction(Intent.ACTION_VIEW);
                    intent.setDataAndType(Uri.fromFile(file), ".xls");
                    try {
                        context.startActivity(intent);
                    } catch (ActivityNotFoundException e) {
                        Toast.makeText(context, "您没有安装打开此文件的软件,请安装后再次打开", Toast.LENGTH_SHORT).show();
                    }
                } else if (pathList.get(postion).contains(TYPE_DOC)) {
                    Intent intent = new Intent();
                    File file = new File(savePath);
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    intent.setAction(Intent.ACTION_VIEW);
                    intent.setDataAndType(Uri.fromFile(file), ".doc");
                    try {
                        context.startActivity(intent);
                    } catch (ActivityNotFoundException e) {
                        Toast.makeText(context, "您没有安装打开此文件的软件,请安装后再次打开", Toast.LENGTH_SHORT).show();
                    }
                } else {
                    ToastUtils.toast(context, "不是以上的类型");
                }

            }

            @Override
            public void onFailure(HttpException e, String s) {
                Log.d("=====", "=====下载失败======" + s + e.getMessage());
                DialogUtils.getInstance().dismiss();


            }

            @Override
            public void onLoading(long total, long current, boolean isUploading) {
                super.onLoading(total, current, isUploading);
                Log.d("====下载中==", total + "," + current);
            }

            @Override
            public void onStart() {
                super.onStart();
                Log.d("=====", "=====apk开始下载======");

            }
        });
//        //下载路径
//        final String url = pathList.get(postion);
//        Request request = new Request.Builder().url(pathList.get(postion)).build();
//        new OkHttpClient().newCall(request).enqueue(new Callback() {
//            @Override
//            public void onFailure(Call call, IOException e) {
//                // 下载失败
//                e.printStackTrace();
//                ToastUtils.toast(context, "下载失败,请重新下载");
//            }
//
//            @Override
//            public void onResponse(Call call, Response response) throws IOException {
//                Sink sink = null;
//                BufferedSink bufferedSink = null;
//                try {
//                    String mSDCardPath = Environment.getExternalStorageDirectory().getAbsolutePath();
//                    File dest = new File(mSDCardPath, url.substring(url.lastIndexOf("/") + 1));
//                    sink = Okio.sink(dest);
//                    bufferedSink = Okio.buffer(sink);
//                    bufferedSink.writeAll(response.body().source());
//                    bufferedSink.close();
//                    if (pathList.get(postion).contains(TYPE_TXT)) {
//                        Intent intent = new Intent("android.intent.action.VIEW");
//                        intent.addCategory("android.intent.category.DEFAULT");
//                        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//                        Uri uri2 = Uri.fromFile(new File(pathList.get(postion)));
//                        intent.setDataAndType(uri2, "text/plain");
//                        context.startActivity(intent);
//                    } else if (pathList.get(postion).contains(TYPE_XLS)) {
//                        Intent intent = new Intent("android.intent.action.VIEW");
//                        intent.addCategory("android.intent.category.DEFAULT");
//                        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//                        Uri uri = Uri.fromFile(new File(pathList.get(postion)));
//                        intent.setDataAndType(uri, "application/vnd.ms-excel");
//                        context.startActivity(intent);
//                    } else if (pathList.get(postion).contains(TYPE_DOC)) {
//                        Intent intent = new Intent("android.intent.action.VIEW");
//                        intent.addCategory("android.intent.category.DEFAULT");
//                        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//                        Uri uri = Uri.fromFile(new File(pathList.get(postion)));
//                        intent.setDataAndType(uri, "application/msword");
//                        context.startActivity(intent);
//                    } else {
//                        ToastUtils.toast(context, "不是以上的类型");
//                    }
//                } catch (Exception e) {
//                    e.printStackTrace();
//                } finally {
//                    if (bufferedSink != null) {
//                        bufferedSink.close();
//                    }
//
//                }
//            }
//        });
    }


    OnRequestNetWorkListener listener;

    public void setOnRequestNetWorkListener(OnRequestNetWorkListener listener) {
        this.listener = listener;
    }

    public interface OnRequestNetWorkListener {
        void notOk(String err);

        void ok(String response);
    }
}

4.DialogUtils 

public class DialogUtils {

    private static Dialog dialog;
    private static DialogUtils du;

    public DialogUtils() {

    }

    public static DialogUtils getInstance() {

        if (du == null) {
            du = new DialogUtils();
        }
        return du;
    }

    public void showDialog(Context context, String content) {
        int width = ScreenSize.screenWidth(context);
        LayoutParams params = new LayoutParams(width / 3, width / 3);
        LayoutInflater inflater = LayoutInflater.from(context);
        dialog = new Dialog(context, R.style.MyDialogStyle);
        View v = inflater.inflate(R.layout.dialog, null);
        TextView tv = (TextView) v.findViewById(R.id.textViewContent);
        tv.setText(content);
        dialog.setContentView(v, params);
        dialog.show();
        System.out.println("-----进入执行----showDialog");
    }

     public  boolean isShow(){
         System.out.println("-----进入----isShow");
         if (dialog!=null){
             return dialog.isShowing();
         }else {
             return false;
         }
     }

    public void dismiss() {
        System.out.println("-----进入----dismiss()");
        if (dialog != null) {
            dialog.dismiss();
            System.out.println("---执行------dismiss");
        }
    }

}
    <!-- 加载进度匡========================================================================== -->
    <style name="MyDialogStyle">
        <!-- 背景透明 -->
        <item name="android:windowBackground">@android:color/transparent</item>
        <!-- 边框 -->
        <item name="android:windowFrame">@null</item>
        <!-- 无标题 -->
        <item name="android:windowNoTitle">true</item>
        <!-- 是否浮现在activity之上 -->
        <item name="android:windowIsFloating">true</item>
        <!-- 半透明 -->

        <item name="android:windowIsTranslucent">true</item>
        <!-- 内容覆盖 -->
        <item name="android:windowContentOverlay">@null</item>
        <!-- 窗口样式Dialog -->
        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
        <!-- 模糊 -->
        <item name="android:backgroundDimEnabled">true</item>

    </style>
dialog.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:alpha="0.8"
    android:background="@drawable/dialog_backgroud"
    android:gravity="center"
    android:orientation="vertical">

    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progress"
        android:layout_width="80dp"
        android:layout_height="30dp" />

    <TextView

        android:id="@+id/textViewContent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:singleLine="true"
        android:textColor="@android:color/white"
        android:textSize="16sp" />
</LinearLayout>
dialog_backgroud.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <corners android:radius="5dp" />
            <solid android:color="@android:color/black" />
        </shape>
    </item>
</selector>

5.ToastUtils

public class ToastUtils {
	public static Toast toast(Context context, String text) {
		
		Toast tos=Toast.makeText(context, text, Toast.LENGTH_SHORT);
		tos.show();
		return tos;
	}
	public void cancelToast(Toast toast) {    
		if (toast != null) {    
			toast.cancel();    
		}    
	}    
}

6.获取屏幕尺寸ScreenSize

public class ScreenSize {

	/**
	 * 手机屏幕的宽
	 * 
	 * @return
	 */
	public static int screenWidth(Context context) {
		Activity activity = (Activity) context;
		DisplayMetrics dm = new DisplayMetrics();
		activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
		return dm.widthPixels;
	}

	/**
	 * 手机屏幕的高
	 * 
	 * @return
	 */
	public static int screenHeight(Context context) {
		Activity activity = (Activity) context;
		DisplayMetrics dm = new DisplayMetrics();
		activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
		return dm.heightPixels;
	}

	public static int dp2px(int dpVal, Context context) {

		return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
				dpVal, context.getResources().getDisplayMetrics());

	}

	public static int sp2px(int spVal, Context context) {

		return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,
				spVal, context.getResources().getDisplayMetrics());

	}
	public static int px2dip(Context context, float pxValue) {
		final float scale = context.getResources().getDisplayMetrics().density;
		return (int) (pxValue / scale + 0.5f);
	}
}

四.在项目使用

DialogUtils.getInstance().showDialog(getContext(), "加载中...");   
  MyOkhttpUtil.postRequest(Constant.APP_URL + "houseTypeList", map, new MyOkhttpUtil.OnRequestNetWorkListener() {
            @Override
            public void notOk(String err) {
                new Throwable("请求失败");
            }

            @Override
            public void ok(String response) {
                JSONObject jsonObject;
                try {
                    Log.e("Tag","丝路会展:"+response);
                    jsonObject= new JSONObject(response);
                    String status = jsonObject.getString("status");
                    Log.e("TAG",status);
                    if (status.equals("1")){

                        String data = jsonObject.getString("data");
                        Log.e("TAG",data);
                        JSONObject info = new JSONObject(data);
                        //户型列表
                        getHouseTypeList(info);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });

    }

 

okHttpUtils okHttpUtils工具类要用到的三个jar包,这里有相应的解释http://blog.csdn.net/xxdw1992 立即下载

相关推荐

com.zhy:okhttputils:2.6.2依赖包

implementation 'com.zhy:okhttputils:2.6.2'依赖包jar包

OkHttpUtils - 封装了okhttp的网络框架(1),Android面试真题精选

目前内部提供的包含BeanCallBack, StringCallBack, FileCallBack, BitmapCallback,可以根据自己的需求去自定义Callback。

code8889的博客 1572

移动机器人底盘-四轮差速模型(四轮独立)

对于底盘的前轮和后轮来说,其速度是同步的,那么在理想条件下,可以将底盘运动视为以ICR为圆心做圆周运动,对于四个轮子来说,圆周运动的角速度是一致的,圆周运动圆心ICR始终位于底盘几何中心COG的y轴延长线上,ICR与COG之间的距离。有关,整个底盘的速度位于速度瞬心COM处,用。四轮差速底盘设定左轮、右轮得速度分别为。圆周运动的角速度公式如式1所示。受约束,约束与圆周运动的角速度。合成,设四个轮子的速度分别为。,设左轮和右轮之间的轴距为。为圆周运动角速度,线速度为。,其均由预设目标速度。

Moresweet 猫甜 1万+

解决添加依赖包后出现Failed to resolve: com.zhy:okhttputils:2.6.2的问题

在项目目录下的settings.gradle文件中增加。在项目目录下的build.gradle文件中增加。

MoonAndroid的博客 4361

从医疗成像到工业检测:CMOS图像传感器NIR技术的最新应用案例解析

本文深入解析了CMOS图像传感器NIR技术在医疗成像和工业检测中的最新应用案例。通过提升量子效率至70%,NIR技术实现了血管可视化、材料缺陷检测等突破性进展,显著提高了医疗诊断精度和工业质检效率。文章还探讨了系统集成关键考量和前沿发展趋势。

weixin_30879169的博客 90

利用docx4j与docx4j-ImportXHTML高效实现HTML到Word的自动化转换

本文详细介绍了如何利用docx4j与docx4j-ImportXHTML库,在Java环境中高效实现HTML到Word文档的自动化转换。内容涵盖从环境搭建、核心依赖配置,到集成Spring Boot REST API的完整实战流程,并深入解析了处理图片、CSS样式、字体设置以及使用模板保证样式统一等高级技巧与常见问题解决方案,帮助开发者构建稳定的文档自动化生成流水线。

cnn8visionary的博客 366

05.Android用Okhttp搭建自己的网络框架

在Android Studio中只要在dependencies里添加 compile ‘com.zhy:okhttputils:2.6.2’ 而在eclipse中则需要导入okhttp-3.9.0.jar,okhttputils-2_6_2.jar,okio-1.13.0.jar 这三个jar包,但是放心,我已经上传了资源 http://download.csdn.net/download/zxc...

qq_37390941的博客 704

LangChain + PlayWright实战:5分钟搞定网页自动化测试(附完整代码)

本文详细介绍了如何利用LangChain与PlayWright构建智能网页自动化测试系统。通过环境配置、核心架构设计、实战Agent构建及性能优化等步骤,开发者可以快速实现高效的Web操作自动化,提升测试效率。文章还提供了完整代码示例和典型问题解决方案。

weixin_27791839的博客 239

OkHttpUtils - 封装了okhttp的网络框架

前言OkHttpUtils - 封装了okhttp的网络框架,目前Get,Post的请求已经完成,支持大文件上传下载,上传进度回调,下载进度回调,表单上传(多文件和多参数一起上传),链式调用,整合Gson,自动解析返回对象,支持Https和自签名证书,支持cookie自动管理,后期将要实现的功能,统一的上传管理和下载管理。用法 Android studio 使用前,对于Android Studio

向着太阳迎着光 2200

别再凭感觉选电容了!手把手教你计算电机控制器里的母线电容(附Excel计算工具)

本文详细解析了电机控制器中母线电容的选型方法,从理论计算到工程实践,帮助工程师避免常见误区。通过精确计算纹波电压、电容容量等关键参数,并结合薄膜电容与电解电容的性能对比,提供实用的选型建议。附带的Excel计算工具可快速完成参数计算,适用于工业伺服驱动和电动车电机控制器设计。

weixin_28720573的博客 518

Python-编写点云处理软件(二)点云软件ui制作之仿CC界面

至本篇结束,我们已经能够获得一个有点模子的界面了,但是具体的功能还没有编写,后续的文章将逐渐完善功能。

weixin_43894929的博客 3953

Android 网络请求框架okhttputils报错(okhttp3找不到)

Gralde升级导致网络请求框架okhttputils报错(okhttp3找不到)

帅次的博客 4955

【GlobalMapper精品教程】006:Excel表格(.xls)或文本(.txt .csv)坐标文件生成矢量点

原始的坐标数据如下图所示,其中坐标为Lat经度,LNG纬度,均为十进制度的形式,一般软件都支持十进制度的格式,如果不支持,你可以尝试使用度分秒的形式,图中的DDMMSS-LAT为纬度,DDMMSS-LNG为经度。打开globalmapper软件,点击【打开数据文件】,选择坐标数据文件(案例中的数据位配套实验数据包中的data006.rar)气象台站分布点坐标.xls。选择坐标系:本案例数据采用的是经纬度,因此选择Geographic(Latitude/Longitude),基准选择WGS84,点击确定。

智慧空间实验室 2570

Android okhttputils 第三方库网络请求库

Android okhttp

MrYanXi的博客 1447

剪映自动化工具来了:AI帮你自动剪辑成片

🎬分享一个剪映自动化剪辑工具!AI 自动帮你完成从写文案、配音、加字幕、选音乐、上特效到最终导出的整套流程🎈

XiaoqiangClub的博客 857

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

学习笔记Android联网框架OkHttpUtils及AsycHttpClient

今天来记录一下Android联网框架OkHttpUtils及AsycHttpClient的学习笔记

haojundd的博客 438

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

OkHttpUtils的使用

OkHttpUtils是一个非常好的网络协议框架,它是在OkHttp的基础上进行了二次封装。要使用这个类首先下载jar包,如下: http://download.csdn.net/download/xxdw1992/10151070 OkHttpUtils下载文件 OkHttpUtils.get().url("网址").build().execute(new FileCall...

xxdw1992的博客 2733

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

OkHttp-utils的使用

1.添加依赖:compile 'com.zhy:okhttputils:2.6.2' 2.清单文件中注册初始化: 初始化:OkHttpClient okHttpClient = new OkHttpClient.Builder() // .addInterceptor(new LoggerInterceptor("TAG")) ...

weixin_34037977的博客 349

Okhttputils终极封装

前言:项目源码https://github.com/yulyu2008/XiayuOkHttpOkhttputils是张鸿洋基于okhhttp封装的一个框架,使用起来很方便,相信很多人都用到过,这里我们在这个框架的基础上二次封装,让我们用起来更加方便.主要功能: 可以添加统一的头信息 统一处理异常 自动注入加载动画(可选) 自动解析bean对象 结合Stetho,调试更方便

夏雨 2万+

OkHttpUtils一个专注于让网络请求更简单的框架

1.支持的常用功能 一般的 get,post,put,delete,head,options请求基于Post的大文本数据上传,postString(),postJson()等多文件和多参数统一的表单上传(允许监听上传进度)支持一个key上传一个文件,也可以一个Key上传多个文件大文件下载和下载进度回调大文件上传和上传进度回调支持cookie的内存存储和持久化存储,支持传递自定义cookie提

hehe307的专栏 1万+

OkHttpUtil的使用

1,studio  下面依赖 : compile 'com.zhy:okhttputils:2.6.2' 2 ,  代码展示: private void downData() { String url= DownUrl.ROLLPAGE_URL; OkHttpUtils .get()// .url(url)//

vily_luky的博客 735

OkHttpUtils的常规使用

OkHttpUtils的常规使用,上传图片,请求头带有中文字符乱码等

帅次的博客 3623

ANDROID 问题整理 九

// 判断软件是否在后台 // 后台启动页面设置 // java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. // rsa加密 // RSA/RSA2 生成签名

qq_33990091的博客 230

okhttputils java_okhttp-utils用法总结

引用方法Android Studiocompile 'com.zhy:okhttputils:2.6.2'Eclipse下载最新jar:okhttputils-2_6_2.jar注:需要同时导入okhttp和okio的jar,下载见:https://github.com/square/okhttp.用法示例json-server内容{"user": {"username": "Roy","pass...

weixin_35865261的博客 810

okhttputils下载安装apk

1、配置 build.gradle添加依赖 implementation 'com.zhy:okhttputils:2.6.2' 2、初始化(可以在application中初始化) OkHttpClient.Builder builder = new OkHttpClient.Builder() .connectTimeout(15000L, TimeUnit.SECOND...

碎火流荧的博客 1528

OkhttpUtils封装

 https://www.cnblogs.com/whycxb/p/7636249.html MyApplication 进行初始化 package com.example.administrator.myokhttp; import android.app.Application; import android.content.Context; import com.example...

code_dream_wq的博客 809
上一篇: 抽屉布局DrawerLayout使用
下一篇: OKhttp的回调里更新UI的问题
望月不眠兮日出不觉矣
博客等级 码龄10年 6粉丝 17原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值