-5

The codes that i am having issue with is below

public class FaviconFetcher {
    private static FaviconFetcher INSTANCE = new FaviconFetcher();



        private OkHttpClient client = new OkHttpClient();

    private final String[] htmlIconCssQueries = {
        "meta[property=\"og:image\"]",
        "meta[name=\"msapplication-TileImage\"]",
        "link[rel=\"icon\"]",
        "link[rel=\"shortcut icon\"]",
        "link[rel=\"apple-touch-icon\"]",
        "link[rel=\"apple-touch-icon-precomposed\"]",
        "img[alt=\"Logo\"]",
        "img[alt=\"logo\"]"
    };

    private final String[] hardcodedIconPaths = {
        "/favicon.ico",
        "/apple-touch-icon.png",
        "/apple-touch-icon-precomposed.png",
    };

    private FaviconFetcher() {}

    public static FaviconFetcher getInstance () {
        return INSTANCE;
    }

    public String getFaviconUrl (Document document) {
        List <String> potentialIcons = getPotentialFaviconUrls(document);
        return pickBestIconUrl(potentialIcons);
    }


    public List<String> getPotentialFaviconUrls (Document document) {
        List<String> iconUrls = new ArrayList<String>();
        HttpUrl base = HttpUrl.parse(document.baseUri());

        for (String cssQuery : htmlIconCssQueries) {
            for (Element e : document.select(cssQuery)) {
                if (e.hasAttr("href")) {
                    iconUrls.add(e.attr("href"));
                }

                if (e.hasAttr("content")) {
                    iconUrls.add(e.attr("content"));
                }

                if (e.hasAttr("src")) {
                    iconUrls.add(e.attr("src"));
                }
            }
        }

        for (String path : hardcodedIconPaths) {
            HttpUrl url = HttpUrl.parse("http://" + HttpUrl.parse(document.baseUri()).host() + path);
            iconUrls.add(url.toString());
        }

        for (ListIterator<String> i = iconUrls.listIterator(); i.hasNext(); ) {
            HttpUrl httpUrl = base.resolve(i.next());
            if (httpUrl != null) {
                i.set(httpUrl.toString());
            } else {
                i.remove();
            }
        }

        return iconUrls;

    }


    public String pickBestIconUrl (List<String> urls) {
        String bestIconUrl = null;
        int currentBestWidth = 0;

        for (String url : urls) {
            BitmapFactory.Options options = getBitmapDimensFromUrl(url);
            if (options != null && options.outHeight == options.outHeight) {
                if ((bestIconUrl != null) && (currentBestWidth <= options.outWidth)) {
                    bestIconUrl = url;
                    currentBestWidth = options.outWidth;    
                } else if (bestIconUrl == null) {
                    bestIconUrl = url;
                    currentBestWidth = options.outWidth;
                }
            }
        }

        return bestIconUrl;
    }

    private BitmapFactory.Options getBitmapDimensFromUrl (String url) {
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;

        Request request = new Request.Builder()
            .url(url)
            .build();

        try {
            Response response = client.newCall(request).execute();
            InputStream is = response.body().byteStream();

            BitmapFactory.decodeStream(is, null, options);

            response.body().close();
            is.close();

            return options;

        } catch (IllegalArgumentException | IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}

I have done some research about this but I have not get a defined solution to this issue. I do not want to change the android-sdk. Any help will be appreciated. Thanks.

Webln
  • 297
  • 3
  • 10

1 Answers1

0

Import Perfectly .

Just add this in your build.gradle

    android {
    useLibrary 'org.apache.http.legacy'
}

Then Clean-Rebuild-Sync your project .

Which version are you using ?

  1. compile 'com.squareup.okhttp3:okhttp:3.2.0' or
  2. compile 'com.squareup.okhttp:okhttp:2.5.0'

Read

https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html

IntelliJ Amiya
  • 74,896
  • 15
  • 165
  • 198
  • 1
    compile 'com.squareup.okhttp:okhttp:2.5.0' – Webln May 24 '16 at 09:31
  • my dependencies compile com.squareup.okhttp:okhttp:2.5.0. I just need a clue on how to reformat the code to work for HttpUrlConnection not HttpUrl – Webln May 24 '16 at 09:58
  • *useLibrary 'org.apache.http.legacy'* what for ? he is not using Apache HTTP client ... *Read [link to changes]* why? okhttp library should not be affected – Selvin May 25 '16 at 15:42