0

我的服务器将编码的 Base64 字符串发送到我的 android 设备。之后,我在此方法中解码 Base64 字符串以使其可绘制。当我将图像添加到 Itemizedoverlay 中时,我看不到图像。

public Drawable seticon(String input){

    byte[] b = Base64.decode(input, Base64.DEFAULT);
    Bitmap decodedByte = BitmapFactory.decodeByteArray(b, 0, b.length);
    Drawable drawable = new BitmapDrawable(decodedByte);
    drawable.setBounds(0, 0, 50, 50);
    return drawable;
}

public void setphotopoint(String input){
    Drawable drawable = seticon(input);
    PhotoOverlay aPhotoOverlay = new PhotoOverlay(drawable, this);
    OverlayItem overlayitem = new OverlayItem();
    overlayitem.setMarker(drawable);
    aPhotoOverlay.addOverlay(overlayitem);
    overlays.add(aPhotoOverlay);
}

这是我的 PhotoOverlay 课程

public class PhotoOverlay extends ItemizedOverlay<OverlayItem>{

    private ArrayList<OverlayItem> items = new ArrayList<OverlayItem>();

    Context mContext ;

    public PhotoOverlay(Drawable defaultMarker, Context context) {
        super(boundCenterBottom(defaultMarker));
        this.mContext = context;
    }
    public PhotoOverlay(Drawable defaultMarker) {
        super(boundCenterBottom(defaultMarker));
        // TODO Auto-generated constructor stub
    }

    protected boolean onTap(int index) {
        return true;
    }

    public void addOverlay(OverlayItem overlay) {
        items.add(overlay);
        //setLastFocusedIndex(-1);
        populate();
    }
    @Override
    protected OverlayItem createItem(int i) {
        // TODO Auto-generated method stub
        return items.get(i);
    }
    public void clear() {
        items.clear();
        populate();
    }

    public void removeOverlay(OverlayItem overlay) {
        items.remove(overlay);
        populate();
    }

    @Override
    public int size() {
        // TODO Auto-generated method stub
        return items.size();
    }
}
4

1 回答 1

2

将您的二进制文件转换为 Base64,然后使用以下代码检索它:

public static void base64ToFile(String path, String strBase64)
            throws IOException {
        byte[] bytes = Base64.decode(strBase64);
        byteArrayTofile(path, bytes);
    }

public static void byteArrayTofile(String path, byte[] bytes)
        throws IOException {
    File imagefile = new File(path);
    File dir = new File(imagefile.getParent());
    if (!dir.exists()) {
        dir.mkdirs();
    }
    FileOutputStream fos = new FileOutputStream(imagefile);
    fos.write(bytes);
    fos.close();
}

将二进制文件转换为 Base64:

public static String fileToBase64(String path) throws IOException {
    byte[] bytes = fileToByteArray(path);
    return Base64.encodeBytes(bytes);
}

public static byte[] fileToByteArray(String path) throws IOException {
    File imagefile = new File(path);
    byte[] data = new byte[(int) imagefile.length()];
    FileInputStream fis = new FileInputStream(imagefile);
    fis.read(data);
    fis.close();
    return data;
}
于 2012-04-15T09:19:49.293 回答