I'm trying to use Retrofit & OKHttp to cache HTTP responses. But I'm Getting java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File android.content.Context.getCacheDir() on a null object reference. Here I will put my API Java Class.Please help me,your Help will be Appreciated.
Here is my ApiManager class which contains the interceptor , the getAPI() which has the retrofit building part:
public class ApiManager {
    private static Context context;
    public static final String API_URL = "https://www.alot.com/webservice/"; //Production
    private static ProductionAPIService service;
    public ProductionAPIService getService() {
        return service;
    }
    private static OkHttpClient okClient;
    private static ApiManager apiManager = null;
    private ApiManager() {
    }
    public static ApiManager getApi() {
        if (apiManager == null) {
            apiManager = new ApiManager();
            File httpCacheDirectory = new File(context.getCacheDir(), "responses");
            int cacheSize = 10 * 1024 * 1024; // 10 MiB
            Cache cache = new Cache(httpCacheDirectory, cacheSize);
            OkHttpClient client = new OkHttpClient.Builder()
                    .addNetworkInterceptor(REWRITE_CACHE_CONTROL_INTERCEPTOR)
                    .cache(cache)
                    .build();
            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(API_URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    //    .client(SelfSigningClientBuilder.createClient(MyApplication.context))
                    .client(client)
                    .build();
            service = retrofit.create(ProductionAPIService.class);
        }
        return apiManager;
    }
    private static final Interceptor REWRITE_CACHE_CONTROL_INTERCEPTOR = new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Response originalResponse = chain.proceed(chain.request());
            if (AppUtils.isConnectedToInternet(context,true)) {
                int maxAge = 60; // read from cache for 1 minute
                return originalResponse.newBuilder()
                        .header("Cache-Control", "public, max-age=" + maxAge)
                        .build();
            } else {
                int maxStale = 60 * 60 * 24 * 28; // tolerate 4-weeks stale
                return originalResponse.newBuilder()
                        .header("Cache-Control", "public, only-if-cached, max-stale=" + maxStale)
                        .build();
            }
        }
    };
}
 
     
    