Back to project page PkRSS.
The source code is released under:
Apache License
If you think the Android project PkRSS listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package com.pkmmte.pkrss.downloader; // w w w . j av a 2s . c o m import android.content.Context; import android.net.Uri; import android.util.Log; import com.pkmmte.pkrss.Request; import com.squareup.okhttp.Cache; import com.squareup.okhttp.OkHttpClient; import com.squareup.okhttp.Response; import java.io.File; import java.io.IOException; import java.util.concurrent.TimeUnit; /** * An improved version of the DefaultDownloader using the OkHttp library. * <p> * This Downloader class uses Square's OkHttp library for networking. It is * preferred over the DefaultDownloader and often performs better than the default * implementation although it requires you to include OkHttp as a dependency to your project. */ public class OkHttpDownloader extends Downloader { // OkHttpClient & configuration private final OkHttpClient client = new OkHttpClient(); private final String cacheDir = "/okhttp"; private final int cacheSize = 1024 * 1024; private final int cacheMaxAge = 2 * 60 * 60; private final long connectTimeout = 15; private final long readTimeout = 45; public OkHttpDownloader(Context context) { this.client.setConnectTimeout(connectTimeout, TimeUnit.SECONDS); this.client.setReadTimeout(readTimeout, TimeUnit.SECONDS); try { File cacheDir = new File(context.getCacheDir().getAbsolutePath() + this.cacheDir); this.client.setCache(new Cache(cacheDir, cacheSize)); } catch (Exception e) { Log.e(TAG, "Error configuring Downloader cache! \n" + e.getMessage()); } } @Override public boolean clearCache() { try { client.getCache().delete(); return true; } catch (IOException e) { return false; } } @Override public String execute(Request request) throws IllegalArgumentException, IOException { // Invalid URLs are a big no no if (request.url == null || request.url.isEmpty()) { throw new IllegalArgumentException("Invalid URL!"); } // Start tracking download time long time = System.currentTimeMillis(); // Empty response string placeholder String responseStr; // Handle cache int maxCacheAge = request.skipCache ? 0 : cacheMaxAge; // Build proper URL String requestUrl = toUrl(request); // Build the OkHttp request com.squareup.okhttp.Request httpRequest = new com.squareup.okhttp.Request.Builder() .addHeader("Cache-Control", "public, max-age=" + maxCacheAge) .url(requestUrl) .build(); try { // Execute the built request and log its data log("Making a request to " + requestUrl + (request.skipCache ? " [SKIP-CACHE]" : " [MAX-AGE " + maxCacheAge + "]")); Response response = client.newCall(httpRequest).execute(); // Was this retrieved from cache? if (response.cacheResponse() != null) log("Response retrieved from cache"); // Convert response body to a string responseStr = response.body().string(); log(TAG, "Request download took " + (System.currentTimeMillis() - time) + "ms", Log.INFO); } catch (Exception e) { log("Error executing/reading http request!", Log.ERROR); e.printStackTrace(); throw new IOException(e.getMessage()); } return responseStr; } @Override public String toSafeUrl(Request request) { // Copy base url String url = request.url; if (request.individual) { // Append feed URL if individual article url += "feed/?withoutcomments=1"; } else if (request.search != null) { // Append search query if available and not individual url += "?s=" + Uri.encode(request.search); } // Return safe url return url; } @Override public String toUrl(Request request) { // Copy base url String url = request.url; if (request.individual) { // Handle individual urls differently url += "feed/?withoutcomments=1"; } else { if (request.search != null) url += "?s=" + Uri.encode(request.search); if (request.page > 1) url += (request.search == null ? "?paged=" : "&paged=") + String.valueOf(request.page); } // Return safe url return url; } }