GithubHelp home page GithubHelp logo

rxhttputils's Introduction

rxhttputils's People

Contributors

lygttpod avatar xuhuanli avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rxhttputils's Issues

是否可以加入okhttp的调用风格

很喜欢作者的这个网络工具库,因为习惯了okhttp的调用风格,希望作者可以考虑加入okhttp调用风格,偶然间发现名叫Novate的库有类似实现。很希望RxHttpUtils也可以这样使用,一点建议。最后,感谢大神的库,提高了我们的工作效率

取消全部请求的问题

版本号:2.1.7
描述:使用RxHttp时,调用RxHttpUtils.canceAll(),也就是取消全部请求时,APP崩溃了,直接错误是 java.util.ConcurrentModificationException,日志定位到RxHttpManager.java这个文件的第97行,
可能原因:

@OverRide
public void cancelAll() {
if (mMaps.isEmpty()) {
return;
}
Iterator<Map.Entry<Object, CompositeDisposable>> it = mMaps.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<Object, CompositeDisposable> entry = it.next();
Object tag = entry.getKey();
cancel(tag);
}
}
迭代HashMap()时,同时调用了cancel()这个方法,而这个方法里面有调用了HashMap的remove方法,导致ConcurrentModificationException。

上传

好像没有看到多文件的上传,多图片上传,文件和文字共同上传

动态修改header的问题!! 求解

#31 我按照大神这里头指导的设置了到了本地 存文件的方式
我的需求也是 登录之后 服务器会给返回token的值,通过json给我返回 然后我保存到了SP文件中, 我的请求头的键为 access-token,值就是服务器返回的, 我在全局APPlication设置了 但是不知道此时的值该怎么设置··· 我测试通过登录后返回了token 然后保存到了SP中,可是当我请求另外一个接口的时候 access-token就没有传递···
l5 4xe k0 7 cvl66b0f4 8

2222

关于缓存,和取消请求

1.可否自定义缓存,因为自带你的缓存,必须是get请求而且还需要服务器配合头文件返回处理
2.可否用:Rxlifecycle取消请求

您好, 请问每次请求都无限制的 New Retrofit 和 OkHttpClient,是出于什么考虑呢?

您好,打扰了,无意中看到您的库,粗略的学习了下您的代码,发现您的框架可以使用两种模式进行网络请求

第一种模式持有全局唯一的 Retrofit.Builder 对象和 OkHttpClient.Builder 对象,每次网络请求都调用一次 build() 方法生成新的 Retrofit 对象 和 OkHttpClient 对象,再调用 create() 生成新的 APIService 对象进行网络请求

第二种模式,每次网络请求都 New 一个 Retrofit.Builder 对象和 OkHttpClient.Builder 对象,进行 RetrofitOkHttpClient 的参数配置后再分别调用一次 build() 方法生成新的 Retrofit 对象 和 OkHttpClient 对象,再调用 create() 生成新的 APIService 对象进行网络请求

可以看到两种模式在每次请求中都会重新生成新的 Retrofit 对象和 OkHttpClient 对象,意味一个使用您这个库的 App 为了请求数据会无限制的重复生成新的 Retrofit 对象和 OkHttpClient 对象

而且这些 Retrofit 对象和 OkHttpClient 对象大多数情况配置可能都是一样的,需要使用到多个 Retrofit 的场景, 大多都是需要多 BaseUrl 进行不同域名请求的情况,但是可以通过 RetrofitUrlManager 重复使用同一个 Retrofit 就可以解决

在我的项目中调用 create() 生成的 APIService 都是全局唯一的,重复请求只会使用同一个 APIService,所以我不明白您为什么需要每次请求网络都需要新建这些对象,App 在进行高频率的网络请求时会出现性能上的损耗吗, 这样做,还是有什么其他的考虑?

感谢您对开源软件做出的贡献,提这个 Issues 只是为了学术交流,如果冒犯到您,请见谅!

缓存问题

有缓存会走onSuccess方法,但是如果需求是,
1.先取缓存,无论如何都去取网络的,您这个框架怎么做!
2.先取缓存,缓存没数据,再去网络的,您这个框架怎么做!
小白一个,可否讲个思路

cancelAllRequest和addDisposable的问题

demo中因为只有一个activity,所以直接在请求接口后,在ondestory中调用cancelAllRequest方法,解除订阅,但是如果有多个activity,用的都是默认的在APP.java中的配置,又因为你的默认的RxHttpUtil是单例模式,用的是同一个private static List disposables; 这个list,这时候比如关闭了其中一个activity,你就没法直接调用cancelAllRequest了。因为就会把存在的其他的activity里面的订阅也给取消。

PS:不需要使用List这种,还要去遍历一个个取消,有现成的CompositeDisposable,添加进去一个个Disposable后,对CompositeDisposable取消订阅就可以。

清单文件合并冲突

library的清单文件里面android:allowBackup="true" 导入的时候无法合并(我在本地禁用了备份功能) 能把这个属性从manifest里面删除吗

线程安全问题

SingleRxHttp对每个请求单独配置参数存在线程安全问题,因为该对象获取的方式为单例获取,所有获取到的该对象,线程之间还是会共享数据(baseUrl等),一个线程配置改变会影响其他线程的参数。

解析的问题

楼主 为什么我用了DataObserver 总是报解析错误,
RxHttpUtils.createApi(ApiService.class)
.geBannerData()
.compose(Transformer.<BaseData>switchSchedulers())
.subscribe(new DataObserver() {
@OverRide
protected void onError(String errorMsg) {
}

                        @Override
                        protected void onSuccess(BannerBean data) {
                            String a = data.getData().get(0).getImg();
                        }
                    });

返回的json:
/**
* status : success
* message :
* data : [{"img":"http://orr4xduaa.bkt.clouddn.com/5a5daf4fa7196.jpg","link":""},{"img":"http://orr4xduaa.bkt.clouddn.com/5a5daf0b41d90.png","link":""}]
* code : 200
* token : 53egcib14n0i3vngmr7nd0vvt7
*/

bean:
private List data;

public List<DataBean> getData() {
    return data;
}

public void setData(List<DataBean> data) {
    this.data = data;
}

public static class DataBean {
    /**
     * img : http://orr4xduaa.bkt.clouddn.com/5a5daf4fa7196.jpg
     * link :
     */

    private String img;
    private String link;

header

如果统一设置了headers ,如何 更新某个子元素

超时时间有问题

请问在请求数据的时候我这边返回的是一个list数组,但是数据为空的时候返回的是
{"error":"0","data":null}
定义的调用接口是
Observable<List> getLive(@query("params") int id);
这样的话数据为空的话就会报错
onError: errorMsg Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
请问有什么办法处理这种情况吗

demo里面

第二个:单个请求
在断网的时候,会报空指针异常,而不是没网络
把:.saveCookie(true),改成false就不会

取消请求的问题

这个方法:是取消所有请求,可能存在你快速点击去下个界面,上一个界面还在请求。这个时候你从下一个界面返回上一个界面的话,上一个界面请求就会被取消,这样体验不好。请问有没有只取消当前activity界面的请求的方法。
@OverRide
protected void onDestroy() {
super.onDestroy();
//取消所有请求
RxHttpUtils.cancelAllRequest();
}

2.1.2 bug

发现 compile 'com.github.lygttpod:SuperTextView:2.1.2' 版本库的一个小bug, stv:sRightIconRes="" 图片可预览,真机运行无法显示,望作者检查一下,版本改成2.1.1后没问题。

请问缓存默认60秒如何修改为其他时间

大神晚上好,我们的需求需要把缓存的60秒改为10秒,拜读了大神的代码,没有找到可以修改的函数。于是copy了一份OkHttpConfig,又copy了一份NetCacheInterceptor,把默认的60秒改为10秒,Copy的OkHttpConfig中使用新的NetCacheInterceptor进行拦截,然后按照原来的OkHttpConfig的使用方式来使用,经测试,发现拦截器全都不好使了,想咨询一下大神,我的问题大概出在哪里?是否有更加简单的修改默认60秒的方法。期待大神回复,感谢大神提供的工具,真的很方便

不适用

3、DataObserver (适合{"code":200,"msg":"描述",data:{}}这样的格式,需要使用BaseData ,其中T为data中的数据模型)
第三种方式没有用

上传单张图片的时候,之前配置好的HeaderInterceptor中的参数没有生效

库开发者您好,在使用
/**
* 上传单张图片
*
* @param uploadUrl 地址
* @param uploadPath 文件路径
*/
private void uploadImg(String uploadUrl, String uploadPath) {

    RxHttpUtils.uploadImg(uploadUrl, uploadPath)
            .compose(Transformer.<ResponseBody>switchSchedulers(loading_dialog))
            .subscribe(new CommonObserver<ResponseBody>() {

                @Override
                protected String setTag() {
                    return "uploadImg";
                }

                @Override
                protected void onError(String errorMsg) {
                    Log.e("allen", "上传失败: " + errorMsg);
                    showToast(errorMsg);
                }

                @Override
                protected void onSuccess(ResponseBody responseBody) {
                    try {
                        String msg = responseBody.string();
                        showToast(msg);
                        Log.e("allen", "上传完毕: " + msg);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            });

}

的时候发现之前定义好的header中的参数没有传递给服务端。其它的接口请求是正常传递header参数的。
请问这种情况下应该怎么处理呢?

cache的空指针异常问题

目前不管是否设置了cache缓存,第一句一定会去执行,然后就有可能报空指针异常。
private void setCacheConfig() {
OkHttpConfig.defaultCachePath = this.context.getExternalCacheDir().getPath() + "/RxHttpCacheData";
if (this.isCache) {
Cache cache;
if (!TextUtils.isEmpty(this.cachePath) && this.cacheMaxSize > 0L) {
cache = new Cache(new File(this.cachePath), this.cacheMaxSize);
} else {
cache = new Cache(new File(OkHttpConfig.defaultCachePath), 104857600L);
}

            OkHttpConfig.okHttpClientBuilder.cache(cache).addInterceptor(new NoNetCacheInterceptor()).addNetworkInterceptor(new NetCacheInterceptor());
        }

    }

里面的第一句,如果设备获取getExternalCacheDir是null,那么后面还会执行getpath,然后就报空指针异常了。

多个接口请求后回调回来 区分的问题!

比如我的Activity要发起 5 次接口请求,而且是没有关联的请求, 我同时发起,然后回调回来(我的请求是在Model层发起的,Activity只管处理回调方法)

Model层发起请求 1

 RxHttpUtils
                .createApi(API.class)
                .getData(pn,ps,type)
                .compose(Transformer.<Rtn>switchSchedulers(DialogUtil.showLoading(context)))
                .subscribe(new CommonObserver<Rtn>() {

                    @Override
                    protected void onError(String errorMsg) {
                        onResponseFailed(null,errorMsg);
                    }

                    @Override
                    protected void onSuccess(Rtn bookBean) {
                        onResponseSuccess(code,bookBean);    //这里是Activity 复写的回调方法
                    }
                });


**Model层发起请求 2RxHttpUtils
                .createApi(API.class)
                .getData(pn,ps,type)
                .compose(Transformer.<Rtn>switchSchedulers(DialogUtil.showLoading(context)))
                .subscribe(new CommonObserver<Rtn>() {

                    @Override
                    protected void onError(String errorMsg) {
                        onResponseFailed(null,errorMsg);
                    }

                    @Override
                    protected void onSuccess(Rtn bookBean) {
                        onResponseSuccess(code,bookBean);  //这里是Activity 复写的回调方法
                    }
                });

**Model层发起请求 3**

RxHttpUtils
                .createApi(API.class)
                .getData(pn,ps,type)
                .compose(Transformer.<Rtn>switchSchedulers(DialogUtil.showLoading(context)))
                .subscribe(new CommonObserver<Rtn>() {

                    @Override
                    protected void onError(String errorMsg) {
                        onResponseFailed(null,errorMsg);
                    }

                    @Override
                    protected void onSuccess(Rtn bookBean) {
                        onResponseSuccess(code,bookBean);  //这里是Activity 复写的回调方法
                    }
                });

这里的RHttpUtils中的onSuccess 中写了个onResponseSuccess() 方法, 我咋我的Activity中复写这个方法  就可以接受回调回来的数据, 那么此时 我该怎么区分  是哪个接口回来的请求呢?

有时候会请求失败

报错

java.io.IOException: unexpected end of stream on Connection{192.168.24.100:9041, proxy=DIRECT@ hostAddress=/192.168.24.100:9041 cipherSuite=none protocol=http/1.1}

不知道是什么原因

如何动态修改设置的全局请求 header?

项目中需要将 token 设置在 header 中,未登录之前 token 是空的,登录之后会获取到服务器返回的token 值。请问在 Application 中初始化了 Rxhttp,设置了全局 headers,在登录后如何动态更新全局 header 的值呢?

public void initRxHttp() {

        HashMap<String, Object> headers = new HashMap<>();
        headers.put("token", "SPUtil.getString("token)");

        OkHttpClient okHttpClient = new OkHttpConfig
                .Builder()
                //全局的请求头信息
                .setHeaders(headers)
                .build();

        RxHttpUtils
                .getInstance()
                .init(this)
                .config()
                //配置全局baseUrl
                .setBaseUrl(Constant.baseUrl)
                //开启全局配置
                .setOkClient(okHttpClient);
    }

单个请求如果设置有缓存,断网去请求报错

RxHttpUtils
//单个请求的实例getSInstance(getSingleInstance的缩写)
.getSInstance()
....(中间省略设置)
.cache(true)
//单个请求的缓存路径及缓存大小,不设置的话有默认值
.cachePath("cachePath", 1024 * 1024 * 100)
如果这样设置单个请求的话,断网的时候Toa:“”会报空指针异常“”,而不是网络连接异常。

关于GsonConvertFactory等参数的疑问

 public RetrofitClient() {
        this.initDefaultOkHttpClient();
        this.mRetrofitBuilder = (new Builder()).addCallAdapterFactory(RxJava2CallAdapterFactory.create()).addConverterFactory(ScalarsConverterFactory.create()).addConverterFactory(GsonConverterFactory.create(GsonAdapter.buildGson()));
    }

我看你的addCallAdapterFactory和addConverterFactory都是写死的,处于什么原因不允许自己配置吗?如果有些需求需要统一对返回结果做处理,本来改个factory就行。

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.