2017-07-24 4 views
1

Erste Entschuldigung für mein schlechtes Englisch zu bekommen. Ich bin neu in der Programmierung (2 Jahre in Collage). Ich versuche, Bild von Zomato zu bekommen. Ja, API gibt uns nur einen Link.(), also muss ich das Bild manuell aus dem Internet holen.Verwenden von Jsoup, um Bild

Ich habe dies bereits in iOS mit Kana getan.

func parseHTML(html:String){ 
    if let doc = Kanna.HTML(html: html, encoding: String.Encoding.utf8){ 
     for show in doc.css("div[class^='photobox']"){ 
      let getA = show.css("a").first 
      let image = getA!.css("img[class^='res-photo']").first?["data-original"] 
      let imageUrl = image!.components(separatedBy: "?")[0] 
      linkImageArray.append(imageUrl) 
      print("jumlah gambar = \(linkImageArray.count)") 
     } 
    } 
    foodCV.reloadData() 
} 

Und meine Frage, wie man das in Jsoup macht? Diese

, wie ich HTML bekam Jetzt

Call<ResponseBody> photos = client.getPhotos(); 
    photos.enqueue(new Callback<ResponseBody>() { 
     @Override 
     public void onResponse(Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) { 
      if (response.isSuccessful()){ 
        Log.i("retrofit: ","response "+response.body().toString()); 
        getPhotos(response.body().toString()); 
      }else{ 
       Log.i("retrofit: ","notSuccess"); 
      } 
     } 

im mit diesem stecken. Photobox.toString leer.

public void getPhotos(String stringResponse){ 
    Document doc = Jsoup.parse(stringResponse); 
    Elements photobox = doc.getElementsByClass("container"); 
    Log.i("html : ",""+photobox.toString()); 
    Toast.makeText(this, photobox.toString(), Toast.LENGTH_SHORT).show(); 
    for (Element data:photobox){ 
     Log.i("html : ",""+data.select("img[class^='res-photo']")); 
     Log.i("html : ",""+data.select("img[class^='res-photo']").first().select("data-original")); 
     data.select("img[class^='res-photo']").first().select("data-original"); 
    } 
} 

Und ich bin sicher ich nicht diesen Jsoup: how to get an image's absolute url? verwenden kann. Es wird alle Bilder zurückgeben. Ich würde gerne mit 'Daten-Original' img werden.

<img class='res-photo-thumbnail thumb-load lazy-photo-inner' 
     src='https://b.zmtcdn.com/images/photoback.png' 
     title='Coffee Sisters - Coffee Sisters&#039;s photo' 
     alt='Coffee Sisters - Coffee Sisters&#039;s photo' 
     data-original='https://b.zmtcdn.com/data/reviews_photos/e4a/04b8e0669945bfe03fd0789cbd42be4a.jpg?fit=around%7C200%3A200&amp;crop=200%3A200%3B%2A%2C%2A' 
     data-type='res' 
     data-photo_id='u_NDY5NzEwNzI1MD' 
     data-index='27' 
     data-category='all' 
     /> 
+0

Mögliches Duplikat [Jsoup: wie ein Bildes absolute URL bekommen] (https://stackoverflow.com/questions/4875064/jsoup-how-to-get-an-images-absolute-url) –

+0

@KarlNicholas Es wird alle img-Tag zurückgeben, ich brauche nur img mit 'Daten-Original'. – Acless

Antwort

0

einfach ein paar Zeilen Code zu ändern i bekommen, was ich ~ wollen

Call<ResponseBody> photos = client.getPhotos(); 
    photos.enqueue(new Callback<ResponseBody>() { 
     @Override 
     public void onResponse(Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) { 
      if (response.isSuccessful()){ 
        Log.i("retrofit: ","response "+response.body().toString()); 
        getPhotos(response.body()); 


      }else{ 
       Log.i("retrofit: ","notSuccess"); 
      } 
     } 

ich nur ändern response.body passieren, anstatt response.body.string.toString.

public void getPhotos(ResponseBody body){ 
    try { 
     Document doc = Jsoup.parse(body.string()); 
     Elements photobox = doc.select("img[class=res-photo-thumbnail thumb-load lazy-photo-inner]");Toast.LENGTH_SHORT).show(); 
     for (Element data : photobox) { 
      String imagelink = data.attr("data-original").toString(); 
      String[] parts = imagelink.split("[?]"); 
      imageList.add(parts[0]); 
      Log.i("imagelink : ",parts[0]); 
     } 
    }catch (IOException e){ 
     e.printStackTrace(); 
    } 
}