Android Open Source - PkRSS Ok Http Downloader






From Project

Back to project page PkRSS.

License

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.

Java Source Code

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;
  }
}




Java Source Code List

com.pkmmte.pkrss.ApplicationTest.java
com.pkmmte.pkrss.Article.java
com.pkmmte.pkrss.CallbackHandler.java
com.pkmmte.pkrss.Callback.java
com.pkmmte.pkrss.Category.java
com.pkmmte.pkrss.Enclosure.java
com.pkmmte.pkrss.FavoriteDatabase.java
com.pkmmte.pkrss.PkRSS.java
com.pkmmte.pkrss.RequestCreator.java
com.pkmmte.pkrss.Request.java
com.pkmmte.pkrss.Utils.java
com.pkmmte.pkrss.downloader.DefaultDownloader.java
com.pkmmte.pkrss.downloader.Downloader.java
com.pkmmte.pkrss.downloader.OkHttpDownloader.java
com.pkmmte.pkrss.parser.AtomParser.java
com.pkmmte.pkrss.parser.Parser.java
com.pkmmte.pkrss.parser.Rss2Parser.java