0

这是我向地图添加标记的方式

map.addMarker(new MarkerOptions()
                    .position(model.getLatLongfromService())
                    .title(model.getCoupon_name())
                    .snippet(model.getCoupon_id())
                    .icon(BitmapDescriptorFactory.fromFile(DataHolder.imageUrl
                            + model.getCoupon_image())));
  • 我得到这种格式的优惠券图片: http ://www.xyz.com/coupon21.jpg **

  • 当您运行我的应用程序时,我收到此错误。

java.lang.IllegalArgumentException:文件http://test.xyz.de/uploads/company_logo/sample-logo-110x60.jpg包含路径分隔符

谁能帮助我了解问题所在?

谢谢,拉克什

4

1 回答 1

0

我认为问题在于方法 BitmapDescriptorFactory.fromFile 使用参数字符串文件名,它表示要加载的文件(图像)的名称。您提供图像的 http url ( http://test.xyz.de/uploads/company_logo/sample-logo-110x60.jpg ) 而不是它。

您可能需要先下载图像,然后使用 BitmapDescriptorFactory.fromBitmap;

编辑: 要下载图像,您可以使用像这样的一些 AsyncTask 例如:

    AsyncTask<String, Void, Bitmap> loadImageTask = new AsyncTask<String, Void, Bitmap>(){
        @Override
        protected Bitmap doInBackground(String... params) {
            Bitmap bmImg = null;
            try { 
                URL url = new URL(params[0]);
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();   
                conn.setDoInput(true);   
                conn.connect();     
                InputStream is = conn.getInputStream();
                bmImg = BitmapFactory.decodeStream(is); 
            }
            catch (IOException e)
            {       
                e.printStackTrace(); 
                bmImg = null;
            }

            return bmImg; 
        }

        @Override
        protected void onPostExecute(Bitmap result) {
            super.onPostExecute(result);
            // TODO: do what you need with resulting bitmap - add marker to map
        }
    };

然后不要忘记使用适当的参数执行 asynctask - 包含要下载的图像 url 的字符串数组:

loadImageTask.execute(new String[]{yourImageUrl});
于 2013-03-21T13:55:27.603 回答