2016-05-24 8 views
-5

Die Codes, die ich Problem habe mit unten istkann nicht aufgelöst werden okhttp HttpUrl android sdk 23 Symbol

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

Ich habe einige der Forschung über das getan, aber ich habe nicht eine definierte Lösung für dieses Problem bekommen. Ich will den Android-SDK nicht ändern. Jede Hilfe wird geschätzt. Vielen Dank.

+0

reparieren Ihre Importe ... – Selvin

Antwort

0

Importieren Sie perfekt.

Fügen Sie einfach diese in Ihrem build.gradle

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

Dann Sauber-Rebuild-Sync Ihr Projekt.

Welche Version verwenden Sie?

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

lesen

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

+1

Kompilierung ‚com.squareup.okhttp: okhttp: 2.5. 0 ' – Webln

+0

mein abhängiger denies kompilieren com.squadeup.okhttp: okhttp: 2.5.0. Ich brauche nur einen Hinweis auf, wie man den Code neu formatiert, um für HttpUrlConnection zu arbeiten nicht HttpUrl – Webln

+0

* useLibrary 'org.apache.http.legacy' * what for? Er verwendet keinen Apache HTTP-Client ... * Lesen Sie [Link zu Änderungen] * Warum? okhttp-Bibliothek sollte nicht betroffen sein – Selvin

Verwandte Themen