2014-07-02 12 views
5

Próbuję wczytać obraz z adresu URL w niestandardowym oknie InfoWindow, gdy użytkownik kliknie znacznik. Byłem w stanie załadować inne szczegóły, ale obraz się nie załadował. używam biblioteki Picassa, aby to dla mnie zrobić. Przeszukałem wiele powiązanych tematów i zapoznałem się z rozwiązaniami, ale nie byłem w stanie zrozumieć, które rozwiązanie zastosować do rozwiązania mojego problemu. Korzystam z usługi internetowej, aby uzyskać wymagane dane.obraz nie ładuje się z adresu URL w niestandardowej informacjiWindow przy użyciu biblioteki ładowania obrazu Picasso w Androidzie

To jest mój kod:

@Override 
     public View getInfoContents(Marker arg0) { 

      //marker.showInfoWindow(); 
      return null; 
     } 

     @Override 
     public View getInfoWindow(Marker arg0) 
     { 

      View v = getLayoutInflater().inflate(R.layout.map_infowindow, null); 


      for(int i=0 ; i<lstMain.size();i++) 
       { 
        Pojo b=lstMain.get(i); 
        double slat= Double.parseDouble(b.getLatitude()); 
        double slng= Double.parseDouble(b.getLongitude()); 

        double lat= Math.round(slat*100000.0)/100000.0; 
        double lng= Math.round(slng*100000.0)/100000.0; 

        String s1=String.valueOf(lat); 
        String s2=String.valueOf(lng); 

        Log.v("comparing latilongi pojo===>", lat+" , "+lng); 
        Log.v("comparing latilongi marker===>", Clickedlatitude+" , "+Clickedlongitude); 

        if(s1.equals(String.valueOf(Clickedlatitude)) && s2.equals(String.valueOf(Clickedlongitude))) 
        { 
         txtDname=(TextView)v.findViewById(R.id.infoDoctorName); 
         txtDspe=(TextView)v.findViewById(R.id.infoDoctorSpe); 
         txtDaddress=(TextView)v.findViewById(R.id.infoDoctorAddress); 
         imgUrl=(ImageView)v.findViewById(R.id.infoDoctorImage); 
         String url=b.getPhotoURL(); 

         txtDname.setText(b.getDoctorName()); 
         txtDspe.setText(b.getSpecialization()); 
         txtDaddress.setText(b.getAddress1()+" , "+b.getAddress2()); 


         Picasso.with(MapActivity.this) 
         .load(url) 
         .placeholder(R.drawable.ic_launcher) 
         .error(R.drawable.ic_launcher).resize(50, 50) 
         .into(imgUrl); 


        } 

       } 
      return v; 
     } 

już widział te rozwiązania, ale nie rozumiejąc, co dokładnie będzie rozwiązać mój problem:

Why Custom InfoWindow of google map v2 ,Not load url Image?

Android Google maps APIv2 InfoWindow and Markers

Add an Image from url into custom InfoWindow google maps v2

+0

spróbować wolą AndroidQuery stąd: https://code.google.com/p/android-query/ –

+0

@Haresh, możesz wyjaśnić to nieco więcej, Aby zrozumieć, czym jest AndroidQuery i jak z niego korzystać oraz jak może pomóc w rozwiązaniu mojego problemu. – pks

+0

Wygląd w moim ans tutaj: http://stackoverflow.com/questions/19651291/image-from-url-in-android/19651443#19651443 –

Odpowiedz

23

Można użyć Picasso oddzwanianie onSuccess załadowaniu obrazu, jak to

if (image != null) { 
    Picasso.with(getApplicationContext()) 
      .load(image) 
      .placeholder(R.drawable.ic_launcher) 
      .into(i, new MarkerCallback(marker)); 
} 

i stworzyć nową klasę do obsługi Picasso oddzwanianie jak ten MarkerCallback.java

public class MarkerCallback implements Callback { 
    Marker marker=null; 

    MarkerCallback(Marker marker) { 
    this.marker=marker; 
    } 

    @Override 
    public void onError() { 
    Log.e(getClass().getSimpleName(), "Error loading thumbnail!"); 
    } 

    @Override 
    public void onSuccess() { 
    if (marker != null && marker.isInfoWindowShown()) { 
     marker.hideInfoWindow(); 
     marker.showInfoWindow(); 
    } 
    } 
} 
+0

Twoja metoda onSuccess działa, ale nie wiem, dlaczego. Czy możesz wyjaśnić, w jaki sposób nie spowoduje to nieskończonej rekurencji w getInfoWindow? –

+0

Funkcja onSuccess jest wywoływana tylko raz: gdy obraz jest kliknięty po raz pierwszy, po pobraniu obrazu. wszystko, co robi, to "odświeżenie" okna informacyjnego. – brux

+0

ten działa dla mnie. –

Powiązane problemy