【问题标题】:Universal Image Loader in most cases doesn't show image通用图像加载器在大多数情况下不显示图像
【发布时间】:2013-11-29 19:36:19
【问题描述】:

我正在使用通用图像加载器,为我的 Google 地图上的自定义信息窗口加载图像。但在大多数情况下,它不会加载图片,它会为空 uri 显示图片。

这是我的代码 在 MainActivity 中:

initImageLoader();      
markers = new Hashtable<String, String>();
imageLoader = ImageLoader.getInstance();

options = new DisplayImageOptions.Builder()
    .showStubImage(R.drawable.loading)        
    .showImageForEmptyUri(R.drawable.empty)   
    .showImageOnFail(R.drawable.error)
    .cacheInMemory(true)
    .cacheOnDisc(true).bitmapConfig(Bitmap.Config.RGB_565)
    .build();

map.setInfoWindowAdapter(new CustomInfoWindowAdapter());              
ReadXML readXml = new ReadXML();
readXml.getXml(camera);

for (int i = 0; i<camera.size(); i++) {
    Camera cam = camera.get(i);
    LatLng coord = new LatLng(cam.lat, cam.lon);

    String title = Integer.toString(cam.id);
    String place = cam.place;
    String url = cam.img;
    Marker mark = map.addMarker(new MarkerOptions()
        .position(coord)
        .title(title)
        .snippet(place)
        .icon(BitmapDescriptorFactory
        .fromResource(R.drawable.green)));              
    markers.put(mark.getId(), url);
}

自定义信息窗口适配器:

 private class CustomInfoWindowAdapter implements InfoWindowAdapter 
{        
    private View view;
    public CustomInfoWindowAdapter() 
    {
        view = getLayoutInflater().inflate(R.layout.custom_info_window,
                null);            
    }

    @Override
    public View getInfoContents(Marker marker) 
    {
        if (MyMapActivity.this.marker != null && MyMapActivity.this.marker.isInfoWindowShown()) 
        {
            MyMapActivity.this.marker.hideInfoWindow();                            
            MyMapActivity.this.marker.showInfoWindow();
        }            
        return null;
    }

    @Override
    public View getInfoWindow(final Marker marker) 
    {
        MyMapActivity.this.marker = marker;
        String url = markers.get(marker.getId());             

        final ImageView image = ((ImageView) view.findViewById(R.id.badge));


        imageLoader.displayImage(url, image, options,
                new SimpleImageLoadingListener() {
            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) 
            {
                super.onLoadingComplete(imageUri, view, loadedImage);
                getInfoContents(marker);
            }
                    });

        final String title = "Камера №" + marker.getTitle();
        final TextView titleUi = ((TextView) view.findViewById(R.id.title));
        if (title != null) {
            titleUi.setText(title);
        } else {
            titleUi.setText("");
        }

        final String snippet = marker.getSnippet();
        final TextView snippetUi = ((TextView) view
                .findViewById(R.id.snippet));
        if (snippet != null) {
            snippetUi.setText(snippet);
        } else {
            snippetUi.setText("");
        } 
        return view;
    }               
}

和通用图像加载器:

 private void initImageLoader() 
 {
    int memoryCacheSize;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) {
        int memClass = ((ActivityManager) 
                getSystemService(Context.ACTIVITY_SERVICE))
                .getMemoryClass();
        memoryCacheSize = (memClass / 8) * 1024 * 1024;
    } else {
        memoryCacheSize = 2 * 1024 * 1024;
    }

    final ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
            this).threadPoolSize(5)
            .threadPriority(Thread.NORM_PRIORITY - 2)
            .memoryCacheSize(memoryCacheSize)
            .memoryCache(new FIFOLimitedMemoryCache(memoryCacheSize-1000000))
            .denyCacheImageMultipleSizesInMemory()
            .discCacheFileNameGenerator(new Md5FileNameGenerator())
            .tasksProcessingOrder(QueueProcessingType.LIFO).writeDebugLogs() 
            .build();

    ImageLoader.getInstance().init(config);

}

【问题讨论】:

    标签: java android universal-image-loader


    【解决方案1】:

    你有没有看过下面这行实际上将 sring 设置为什么?

    String url = markers.get(marker.getId());  
    

    我怀疑这是否像其他谷歌地图实现一样工作,标记是一个带有多条信息的 json 字符串/对象,你需要获取它,然后从中获取 url。尝试做一些 logcat 日志记录以确保您已经发布了很多代码,因此很难判断哪些部分是相关的。

    【讨论】:

    • 我有private Hashtable&lt;String, String&gt; markers;,我在其中放置了网址和标记ID。 logcat 说,有时它会加载链接,有时它是空的。但是在arraylist中所有链接都是正确的
    • 如果您使用的是哈希表,它不能保存任何空键或空值,您是否记录了所有内容,因为它通过循环添加到表中,以防某些内容为空并导致不存储任何内容?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 2013-05-20
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 2018-08-13
    相关资源
    最近更新 更多