Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 正在尝试使用后台操作设置Imageview_Android - Fatal编程技术网

Android 正在尝试使用后台操作设置Imageview

Android 正在尝试使用后台操作设置Imageview,android,Android,我在谷歌地图公司工作。我已经实现了自定义标记窗口,这个窗口包含标记的照片。我将照片的url作为字符串,并使用线程将其设置为imageview。但是,代码未与用户同步。单击标记后,它会显示我单击的上一个标记的照片。当我进行调试时,我可以看到真实的url值来自后台,但将图像设置为imageview操作的时间变晚了。我怎样才能解决这个问题?我试过毕加索和格莱德,但还是一样的问题 @Override public void onMapReady(GoogleMap map) { this.Wi

我在谷歌地图公司工作。我已经实现了自定义标记窗口,这个窗口包含标记的照片。我将照片的url作为字符串,并使用线程将其设置为imageview。但是,代码未与用户同步。单击标记后,它会显示我单击的上一个标记的照片。当我进行调试时,我可以看到真实的url值来自后台,但将图像设置为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);
}

您将在主UI线程的ImageView上设置图像。如果此代码在
活动中运行
,则可以使用
runOnUiThread(Runnable-Runnable)imageview.setImageBitmap(位图)上选择code>调用以强制它在UI线程上发生。如果您不在活动中,可以使用使用主循环器或框架创建的。这是一个很好的教程,可以将背景线程上的图像下载到UI线程。它使用解决了多个线程的管理问题,但包含了一个很好的描述,说明了如何使用在UI线程上获取位图