2017-04-18 97 views
0

我正在使用googlemap。我已经实现了自定义标记窗口,这个窗口包含了标记的照片。我将照片的网址作为字符串,并使用线程将其设置为imageview。但是,代码不与用户同步。当我点击标记时,它会显示我点击过的上一个标记的照片。当我进行调试时,我可以看到真正的url值来自背景,但设置图像进入imageview操作正变得迟。我怎么解决这个问题?我尝试过毕加索和滑翔,但仍然是同样的问题。试图设置Imageview与后台操作

@Override 
public void onMapReady(GoogleMap map) { 

    this.Window = (ViewGroup) getLayoutInflater().inflate(R.layout.marker_window, null); 
    this.imageview = (ImageView) Window.findViewById(R.id.marker_photo); 
    googleMap = map; 
     googleMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() { 
      @Override 
      public View getInfoWindow(Marker marker) { 
       return null; 
      } 

      @Override 
      public View getInfoContents(final Marker marker) { 
        createThread(imageview,URL).start(); 
        mapWrapperLayout.setMarkerWithInfoWindow(marker, infoWindow); 
        return infoWindow; 
       } 
       return null;} 
     }); 
} 

private synchronized Thread createThread(final ImageView imageView, final String URL) 
{ 
    Thread thread=new Thread(new Runnable() { 
     @Override 
     public void run() { 
      download_image(URL,imageView); 
     } 
    }); 
    return thread; 
} 

public void download_image(String url,ImageView imageview) { 
    URL newurl = null; 

    try { 
     newurl = new URL(url); 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } 

    Bitmap bitmap = null; 

    try { 
     bitmap= BitmapFactory.decodeStream(newurl.openConnection().getInputStream()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    imageview.setImageBitmap(bitmap); 
} 

回答

0

您正在将ImageView上的图像设置为脱离主UI线程。如果此代码在Activity内运行,则可以使用imageview.setImageBitmap(bitmap);调用中的runOnUiThread(Runnable runnable);强制它在UI线程上发生。如果您不在活动中,则可以使用由主Looper或AsyncTask框架创建的Handler