Giter Site home page Giter Site logo

jeasonlzy / okhttp-okgo Goto Github PK

View Code? Open in Web Editor NEW
10.6K 387.0 2.5K 82.87 MB

OkGo - 3.0 震撼来袭,该库是基于 Http 协议,封装了 OkHttp 的网络请求框架,比 Retrofit 更简单易用,支持 RxJava,RxJava2,支持自定义缓存,支持批量断点下载管理和批量上传管理功能

License: Apache License 2.0

Java 100.00%
okhttp okgo restful rxjava rxjava2 http

okhttp-okgo's Issues

普通Post,直接上传Json类型的文本。java.lang.IllegalStateException: closed

如题。使用StringCallback,然后在onResponse回调中使用response.body().string();报错如下:

05-10 12:28:47.081 12630-12630/com.uiho.deviceinfouploader.proj W/System.err: java.lang.IllegalStateException: closed
05-10 12:28:47.081 12630-12630/com.uiho.deviceinfouploader.proj W/System.err:     at okhttp3.internal.http.Http1xStream$FixedLengthSource.read(Http1xStream.java:378)
05-10 12:28:47.081 12630-12630/com.uiho.deviceinfouploader.proj W/System.err:     at okio.Buffer.writeAll(Buffer.java:956)
05-10 12:28:47.081 12630-12630/com.uiho.deviceinfouploader.proj W/System.err:     at okio.RealBufferedSource.readByteArray(RealBufferedSource.java:92)
05-10 12:28:47.081 12630-12630/com.uiho.deviceinfouploader.proj W/System.err:     at okhttp3.ResponseBody.bytes(ResponseBody.java:83)
05-10 12:28:47.081 12630-12630/com.uiho.deviceinfouploader.proj W/System.err:     at okhttp3.ResponseBody.string(ResponseBody.java:109)
05-10 12:28:47.081 12630-12630/com.uiho.deviceinfouploader.proj W/System.err:     at com.uiho.deviceinfouploader.proj.activity.MainActivity$3.onResponse(MainActivity.java:221)
05-10 12:28:47.081 12630-12630/com.uiho.deviceinfouploader.proj W/System.err:     at com.uiho.deviceinfouploader.proj.activity.MainActivity$3.onResponse(MainActivity.java:216)
05-10 12:28:47.081 12630-12630/com.uiho.deviceinfouploader.proj W/System.err:     at com.lzy.okhttputils.request.BaseRequest$4.run(BaseRequest.java:454)
05-10 12:28:47.081 12630-12630/com.uiho.deviceinfouploader.proj W/System.err:     at android.os.Handler.handleCallback(Handler.java:815)
05-10 12:28:47.081 12630-12630/com.uiho.deviceinfouploader.proj W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:104)
05-10 12:28:47.081 12630-12630/com.uiho.deviceinfouploader.proj W/System.err:     at android.os.Looper.loop(Looper.java:194)
05-10 12:28:47.081 12630-12630/com.uiho.deviceinfouploader.proj W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5773)
05-10 12:28:47.082 12630-12630/com.uiho.deviceinfouploader.proj W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
05-10 12:28:47.082 12630-12630/com.uiho.deviceinfouploader.proj W/System.err:     at java.lang.reflect.Method.invoke(Method.java:372)
05-10 12:28:47.082 12630-12630/com.uiho.deviceinfouploader.proj W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
05-10 12:28:47.082 12630-12630/com.uiho.deviceinfouploader.proj W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:799)

没有addNetWotkInterceptor设置入口

使用facebook的stetho得自己加个
/** 添加网络拦截器 */
public OkHttpUtils addNetWotkInterceptor(@nullable Interceptor interceptor) {
okHttpClientBuilder.addNetworkInterceptor(interceptor);
return this;
}

运行报错,大神帮忙看下呗,3Q

1、 Cause: com.android.dex.DexException: Multiple dex files define Lcom/lzy/okhttputils/BuildConfig;
2、Error:Execution failed for task ':app:transformClassesWithDexForDebug'.

com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'F:\ZTEsoft\java\java64\jdk1.7\bin\java.exe'' finished with non-zero exit value 2

有个关于缓存的疑问

就是在CacheMode.DEFAULT下,按照标准的Http协议缓存,为什么不缓存成文件,我记得OKHttp原声就有缓存成文件的啊,难道新版本修改了??

建议去掉ormlite

作为第三方库,再引入其它第三方库,会变大。如果项目又用了其它orm的话更大了

更新后报错,怎么解决,很急

今天一运行代码,提示EncryptCallBack的第43行报错,getSortedMapBykey(params.urlParamsMap),需要的是一个String, 但它是一个List

Post方式提大量数据的时候会卡MainUIThread

看代码,在BaseRequest里的251行generateMultipartRequestBody()这个方法,如果字段的数据量太大(比如3Mb的数据),会卡UI线程好几秒。暂时只能想到直接在.params(这里直接传FormBody)添加重载,少做一次转换。能优化就优化下吧,虽然这种情况非常小,只有我现在有这个需求。

用户取消网络请求。

当用户发起一次网络请求的时候,突然不然继续请求取消盖茨请求的时候,会执行哪个方法 @jeasonlzy0216

关于设置全局公共参数 .addCommonParams(params);的问题

设置全局公共参数 .addCommonParams(params); 调用以下
public void put(HttpParams params) {
if (params != null) {
if (params.urlParamsMap != null && !params.urlParamsMap.isEmpty()) urlParamsMap.putAll(params.urlParamsMap);
if (params.fileParamsMap != null && !params.fileParamsMap.isEmpty()) fileParamsMap.putAll(params.fileParamsMap);
}
}
params为String键值对形式,当urlParamsMap为空时候会自动封装到fileParams中,这个判断是否有问题

泛型类型与parseNetworkResponse返回类型不匹配

当T=String,在执行CallBack的parseNetworkResponse这个方法,经过处理是走:return (T) response;在BaseRequest中: T t = (T) mCallback.parseNetworkResponse(response); sendSuccessResultCallback(t, call, response, mCallback);会catch不到Stirng和response类型不匹配而crash。

选择了一张6K的图片上传报错,大图没事

Caused by: java.lang.StringIndexOutOfBoundsException: length=9; regionStart=6; regionLength=-6
at java.lang.String.startEndAndLength(String.java:588)
at java.lang.String.substring(String.java:1475)
at java.net.DefaultFileNameMap.getContentTypeFor(DefaultFileNameMap.java:38)
at com.lzy.okhttputils.model.HttpParams.guessMimeType(HttpParams.java:147)
at com.lzy.okhttputils.model.HttpParams.put(HttpParams.java:91)
at com.lzy.okhttputils.model.HttpParams.put(HttpParams.java:87)
at com.lzy.okhttputils.request.BaseBodyRequest.params(BaseBodyRequest.java:41)

如何查看历史版本号?

使用框架时,添加的依赖为使用最新,更新之后,网络请求报错,但不知道之前的历史版本是多少,因为没有做封装,改起来会比较麻烦,所以希望提供历史版本号

断网的大Bug

其一:在请求多个文件下载中,此时突然断网,没有进行失败的回调。其二:同样,在请求多个文件下载中,有几个文件下载不完整,我查看了Log,进度条到50~60后直接进行成功回调,进度条没有进入100,所以导致文件不完整。

我想问下如何让请求重新执行一下

根据token失效,重新获取token之后让之前调用的接口重新在执行一次,如何实现呢?因为现在用了你提供的这套HTTP请求框架,所以期待作者的回复

关于下载框架。。。

感谢大神框架,最近有个项目会用到多线程断点续传。。。一般手机应用(360手机市场)
有如下问题
1.如果做按钮及时更新(下载,继续,暂停,安装,打开。。。),按照demo的做法,会出现进度ui无法刷新的问题(因为第一次downloadinfo都为null,自已改了一下,但是没有成功)
2.demo没有判断第三方,或者直接删掉apk的情况。。。
急。。。大神求解!

超时不走fail 和error

你好~,我最近是在使用你的这个框架,做得很好。但是目前有一个问题。就是超时的时候 没有办法捕获到异常。希望作者能够解决下

关于下载的进度信息来源问题

你好!
在DownloadTask.java里面看你的下载进度信息来源是获取response.body().byteStream()之后的读取进度,这个读取进度等价于下载进度吗?我的意思是这个response不是client.execute之后一次性返回的总数据吗?
我在另外的资料里面听到的说法是给client添加一个networkIterceptor拦截器,在拦截器的intercept方法里,把返回的Response中的body替换成自定义的ResponseBody
是不是版本问题呢?

加了cancelTag(context),BaseRequest还是回调了OnError方法

场景:进入一个页面获取数据,tag是传的activity.在网络还没有回调的时候,迅速退出Activity。这个时候BaseRequest回调了OnError,抛出了sokect异常。我就捕获了这个异常回了主线程,并弹出了Dialog.Dialog的Context就是Activity.但这个时候Activity已经不存在了。就出现了空指针。
我的问题是:是不是可以在CallBack方法里有什么判断让这个异常不回到主线程?或者说是我用法没有对?谢谢

可以增加缓存机制吗?

比如先检查本地缓存,如果没有再请求网络。或者先检查网络,如果没有再检查本地之类的

取消网络请求问题

你好我想请问一下,我在使用网络请求时,网络请求正在进行,我点击了一下手机的返回键,正在加载的对话框消失了,但是我的网络请求还在后台进行,是这样吗?

cookie 持久化问题

貌似本次请求会默认添加上次请求的cookie,会导致本次请求添加的cookie就覆盖,
我在生成call的时候,添加了请求头cookie,但不生效,只有第一次访问生效,后面的请求抓包时发现,我的cookie根本没设置进去,而是自动添加了之前响应回来的cookie,
这是个问题~~~

是否有考虑若一个页面中有多个请求,那么回调Callback中如何区分是哪一个请求呢

private class MethodCallBack extends DialogCallback {

    public MethodCallBack(Activity activity, Class<T> clazz) {
        super(activity, clazz);
    }

    @Override
    public void onResponse(boolean isFromCache, T data, Request request, Response response) {
        handleResponse(isFromCache, data, request, response);
    }

    @Override
    public void onError(boolean isFromCache, Call call, @Nullable Response response, @Nullable Exception e) {
        super.onError(isFromCache, call, response, e);
        handleError(isFromCache, call, response);
    }
}

Get请求在拼接地址多了& 符号

在HttpUtils的createUrlFromParams方法里
public static String createUrlFromParams(String url, Map<String, List<String>> params) { try { StringBuilder sb = new StringBuilder(); sb.append(url); if (url.indexOf('&') > 0 || url.indexOf('?') > 0) sb.append("&"); else sb.append("?"); for (Map.Entry<String, List<String>> urlParams : params.entrySet()) { List<String> urlValues = urlParams.getValue(); for (String value : urlValues) { //对参数进行 utf-8 编码,防止头信息传中文 String urlValue = URLEncoder.encode(value, "UTF-8"); sb.append(urlParams.getKey()).append("=").append(urlValue).append("&"); } } sb.deleteCharAt(sb.length() - 1); return sb.toString(); } catch (UnsupportedEncodingException e) { OkLogger.e(e); } return url; }
这句 if (url.indexOf('&') > 0 || url.indexOf('?') > 0) sb.append("&");
判断url含有 符号& 、?会加入&,是为了什么呢;

请问混淆时需要的keep语句

请问混淆时需要的keep语句?

okhttputils

-dontwarn com.lzy.okhttputils.**
-keep class com.lzy.okhttputils.*{;}

okhttp

-dontwarn okhttp3.**
-keep class okhttp3.*{;}

okio

-dontwarn okio.**
-keep class okio.*{;}

session持久化

请问这个怎么能做到session持久化,我试了一下 把app进程杀死以后session就没了

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.