Retrofit2rxjava Android Simples

Retrofit2 + Rxjava +Cache 机制+EventBus,采用ButterKnife注解框架,包含Token失效处理方案,新增RxJa network 情况下缓存一分钟过期重新请求,wifi 情况下不使用缓存,none network 情况下直接读取缓存并离线缓存4周。
Alternatives To Retrofit2rxjava Android Simples
Project NameStarsDownloadsRepos Using ThisPackages Using ThisMost Recent CommitTotal ReleasesLatest ReleaseOpen IssuesLicenseLanguage
Bettercap13,764
14 days ago61April 21, 2021146otherGo
The Swiss Army knife for 802.11, BLE, IPv4 and IPv6 networks reconnaissance and MITM attacks.
Wifi Cracking10,046
6 months ago35mit
Crack WPA/WPA2 Wi-Fi Routers with Airodump-ng and Aircrack-ng/Hashcat
Esp_wifi_repeater3,679
2 years ago183mitC
A full functional WiFi Repeater (correctly: a WiFi NAT Router)
Networkmanager3,551
12 hours ago31gpl-3.0C#
A powerful tool for managing networks and troubleshoot network problems!
Wifi Password2,554
3 months ago12February 14, 20217mitPython
Quickly fetch your WiFi password and if needed, generate a QR code of your WiFi to allow phones to easily connect
Reactivenetwork2,508
754 months ago28September 17, 201936apache-2.0Java
Android library listening network connection state and Internet connectivity with RxJava Observables
Kickthemout2,166
5 months ago103mitPython
💤 Kick devices off your network by performing an ARP Spoof attack.
Trackerjacker2,156
4 years ago78November 30, 201813mitPython
Like nmap for mapping wifi networks you're not connected to, plus device tracking
Linux Wifi Hotspot1,633
2 months ago62bsd-2-clauseC
Feature-rich wifi hotspot creator for Linux which provides both GUI and command-line interface. It is also able to create a hotspot using the same wifi card which is connected to an AP already ( Similar to Windows 10).
Connectivity1,566
4820 days ago29July 07, 2020mitSwift
🌐 Makes Internet connectivity detection more robust by detecting Wi-Fi networks without Internet access.
Alternatives To Retrofit2rxjava Android Simples
Select To Compare


Alternative Project Comparisons
Readme

Retrofit2RxJava-Android-Simples

Retrofit2 + Rxjava +Cache 机制+EventBus,新增Token失效处理方案,mobile network 情况下缓存一分钟过期重新请求,wifi 情况下不使用缓存,none network 情况下直接读取缓存并离线缓存4周。

RxJava生命周期管理

@Override
protected void onResume() {
    super.onResume();
    RxJavaManager.getRxInstance().regist(this);
}

@Override
protected void onPause() {
    super.onPause();
    RxJavaManager.getRxInstance().unregist(this);
}

网络缓存机制

  private final static Interceptor REWRITE_CACHE_CONTROL_INTERCEPTOR = new Interceptor() {
    @Override
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request();
        //获取网络状态
        int netWorkState = NetUtils.getNetworkState(RxApplication.getInstance());
        //无网络,请求强制使用缓存
        if (netWorkState == NetUtils.NETWORN_NONE) {
            request = request.newBuilder()
                    .cacheControl(CacheControl.FORCE_CACHE)
                    .build();
        }

        Response originalResponse = chain.proceed(request);

        switch (netWorkState) {
            case NetUtils.NETWORN_MOBILE://mobile network 情况下缓存一分钟
                int maxAge = 60;
                return originalResponse.newBuilder()
                        .removeHeader("Pragma")
                        .removeHeader("Cache-Control")
                        .header("Cache-Control", "public, max-age=" + maxAge)
                        .build();

            case NetUtils.NETWORN_WIFI://wifi network 情况下不使用缓存
                maxAge = 0;
                return originalResponse.newBuilder()
                        .removeHeader("Pragma")
                        .removeHeader("Cache-Control")
                        .header("Cache-Control", "public, max-age=" + maxAge)
                        .build();

            case NetUtils.NETWORN_NONE://none network 情况下离线缓存4周
                int maxStale = 60 * 60 * 24 * 4 * 7;
                return originalResponse.newBuilder()
                        .removeHeader("Pragma")
                        .removeHeader("Cache-Control")
                        .header("Cache-Control", "public, only-if-cached, max-stale=" + maxStale)
                        .build();
            default:
                throw new IllegalStateException("network state  is Erro!");
        }
    }
};

Token过期处理机制

public class TokenAuthenticator implements Authenticator {
  @Override
  public Request authenticate(Route route, Response response) throws IOException {
      //取出本地的refreshToken
      String refreshToken = PreferenceUtils.getPrefString(RxApplication.getInstance(),"refreshToken","");
      RefreshRequest refreshRequest = new RefreshRequest(refreshToken);
      // 通过一个特定的接口获取新的token,此处要用到同步的retrofit请求
      ServiceApi service = ServiceFactory.createRetrofit2(ServiceApi.class);
      Call<Token> call = service.refresh(refreshRequest);

     //要用retrofit的同步方式
      Token token = call.execute().body();
      PreferenceUtils.setPrefString(RxApplication.getInstance(),"refreshToken",token.getRefresh_token());

      return response.request().newBuilder()
              .header("X-ZUMO-AUTH", token.getAccess_token())
              .build();
   }
}

Android Studio中ButterKnife插件的安装与使用

http://blog.csdn.net/cxc19890214/article/details/47430547

推荐书籍

Think in java

Effective java

Clean code

参考

cheng2016/RxJava-Android-Samples

cheng2016/RxJava

RxJava2的相关操作符,多个请求FlatMap案例

api.register(new RegisterRequest())//发起注册请求
                .subscribeOn(Schedulers.io())//在IO线程进行网络请求
                .observeOn(AndroidSchedulers.mainThread())//回到主线程去处理请求注册结果
                .doOnNext(new Consumer<RegisterResponse>() {
                    @Override
                    public void accept(RegisterResponse registerResponse) throws Exception {
                        //先根据注册的响应结果去做一些操作
                    }
                })
                .observeOn(Schedulers.io())//回到IO线程去发起登录请求
                .flatMap(new Function<RegisterResponse, ObservableSource<LoginResponse>>() {
                    @Override
                    public ObservableSource<LoginResponse> apply(RegisterResponse registerResponse) throws Exception {
                        return api.login(new LoginRequest());
                    }
                })
                .observeOn(AndroidSchedulers.mainThread())//回到主线程去处理请求登录的结果
                .subscribe(new Consumer<LoginResponse>() {
                    @Override
                    public void accept(LoginResponse loginResponse) throws Exception {
                        Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
                    }
                }, new Consumer<Throwable>() {
                    @Override
                    public void accept(Throwable throwable) throws Exception {
                        Toast.makeText(MainActivity.this, "登录失败", Toast.LENGTH_SHORT).show();
                    }
                });

Contact Me

License

Copyright 2016 cheng2016,Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Popular Wifi Projects
Popular Network Projects
Popular Networking Categories
Related Searches

Get A Weekly Email With Trending Projects For These Categories
No Spam. Unsubscribe easily at any time.
Java
Network
Wifi
Rxjava
Retrofit2
Okhttp