Skip to content

This library provides an easy way for configure retrofit for use a 2 layer cache (RAM and Disk)

License

Notifications You must be signed in to change notification settings

asadi110/retrocache

 
 

Repository files navigation

Android RetroCache

API Build Status Android Arsenal

Description

This library provide an easy way for configure retrofit with a 2 layer cache (RAM and Disk). To see more details about the cache used visit DualCache

This allow you to improve the data usage of your apps.

Setup

  • Ensure you can pull artifacts from JitPack :
repositories {
    maven { url 'https://jitpack.io' }
}
  • And add to your module gradle file :
android {
    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
    }
}

dependencies {
    compile 'com.github.iagocanalejas:retrocache:<VERSION>'
}

Usage

  1. In your Service Api Interface change all Call<T> return types for CachedCall<T>

    public interface ApiService {
    
        @GET("/")
        CachedCall<MyObject> getResource();
    
    }
  2. Build your cache. Library include some shortcuts for this tasks but you can always build a full configured cache using DualCache. Just remember cache key type must be String and entry type must be byte[]

    • Basic cache using only RAM.
       DualCache<String, byte[]> mCache = RetroCache.getRamCache(APP_VERSION);
    • Basic cache using both, Disk and Ram, layers.
       DualCache<String, byte[]> mCache = RetroCache.getDualCache(context, APP_VERSION);
    • Basic cache using both, Disk and Ram, layers and setting a life time for entries.
       DualCache<String, byte[]> mCache = RetroCache.getVolatileCache(context, APP_VERSION);
    • You can also get a non configured Builder.
       Builder<String, byte[]> builder = RetroCache.getBuilder(APP_VERSION);

    For see default values in this caches take a look at RetroCache

    Important

    • APP_VERSION is a static integer. When APP_VERSION changes all caches are automatically cleared. It's recommended to use BuildConfig.VERSION_CODE as BuildConfig.VERSION_CODE
  3. Add the cache to your Retrofit service.

    retrofitBuilder.addCallAdapterFactory(new CachedCallFactory(mCache));
  4. Use it as normal retrofit. Just remember to use CachedCall. All retrofit methods are included, and you can also call refresh(callback) to avoid looking in the cache or remove() to invalidate a cached call.

       CachedCall<MyObject> call = ...
       call.refresh(new Callback<MyObject>() {
           ...
       });
       call.remove();

Pull Requests

I welcome and encourage all pull requests. Here are some basic rules to follow to ensure timely addition of your request:

  1. Match coding style (braces, spacing, etc.) This is best achieved using CMD+Option+L (on Mac) or Ctrl+Alt+L on Windows to reformat code with Android Studio defaults.
  2. Pull Request must pass all tests with gradlew check for styling, and gradlew test for unit tests.
  3. If its a feature, bugfix, or anything please only change code to what you specify.
  4. Please keep PR titles easy to read and descriptive of changes, this will make them easier to merge.
  5. Pull requests must be made against develop branch. Any other branch (unless specified by the maintainers) will get rejected.
  6. Have fun!

Maintained By

IagoCanalejas (@iagocanalejas)

Andy (@ANDYear21)

License

Copyright 2016 IagoCanalejas.

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.

About

This library provides an easy way for configure retrofit for use a 2 layer cache (RAM and Disk)

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 100.0%