PHP png base64编码->Android base64解码

PHP png base64编码->Android base64解码,php,android,google-maps-markers,Php,Android,Google Maps Markers,我有一个服务器,它将png base64编码的图像发送到一个android应用程序,该应用程序将其显示为谷歌地图标记 我验证了如果我使用可绘制的工具,一切都可以工作,因此这里的问题来自从服务器接收的数据创建的位图 以下是读取png文件并对图像数据进行编码的PHP代码: if (($imgdata = file_get_contents($fname)) !== false) { $icon = base64_encode($imgdata); } android上接收到的字符串是: i

我有一个服务器,它将png base64编码的图像发送到一个android应用程序,该应用程序将其显示为谷歌地图标记

我验证了如果我使用可绘制的工具,一切都可以工作,因此这里的问题来自从服务器接收的数据创建的位图

以下是读取png文件并对图像数据进行编码的PHP代码:

if (($imgdata = file_get_contents($fname)) !== false) {
    $icon = base64_encode($imgdata);
}
android上接收到的字符串是:

iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAEKUlEQVR4nO3bPWgcRxQH8GusgBEqDgyp5CKq3JkYggsHQQKbeaMj1UGqQEgRCKiw3ViF4XBxkeeNrhCIJBAMgUDApJAakcIgNG+0HFgEF6fKLhKMERhMEMZgubkUtxaJoqDd2zeavc37weuO2zf/ud3bj9lGQwghhBBCCCGEEEIIIYQQQgghhBBCCCHE/8uK++QjJPgBCQ6RYGic2jBeX4vdV+11dlvn0UEXCV4hwfBYPUcPS53d1vnYfdYWelg6Ifh/lCV1M3aftXTXw5X/+OX/a0+wXqnY/dbKal/NGNIPcoSf7QV6sNpXM7H7rg3j9GLe8I/KQTd237Ww7FuzSPC08AQQHKxsq8ux+594Y/36jw5F8E3s/iceEjwcdwKQ1LO1rfnp2GOYWMbra0j65fgTAENL+uvj37vaVzPoYQk9rFvSA/Swbp26FGOMlYZO3ykTPhIMDekHb7+vlyZN9Oo2EuzL6espVjfVO0jQLzsBSHCw7FuzZgveNU5tnPLZJ8u+NRt77JVgnbrEEP7RnzES/Jjr807fiT32SjCk21wTUKg8/BZ77JVgCe5HmQCCN0jwRezxR2dJDyJNwBAJNr/fff9c7AzOBBJ8YB1ct16pzl57qtFoNNa25qdxvKtftqr984Vemsxlh5k//zbwR0hwr8zVL2PdiJ1RMGtb89ORDzGnliU9eLtH1g7HBdbZlP44dlbscGfhKmbPciegvoudFzvj9E8VCDZv/d5Lk7nYmbHppUkTCZ5XINgi1YmdG5tsRUPsQIvW69rcKcW892OqVh5+iZ1daV2nLuDJt4EnoPRLQ7odO8NS0MGn8YMsVft3PVyJnePY0OsvKxBi2dqc2Isz9LBegQBLl/FwK3aWhXX22lNI8CRYME6l2RlWBwk66KCLTqWBtvfCOp3EzrSQXprMhQlDPTNOL5608qGXJk1D6nN0+nGAbf9hd+BijCzHkt1+YA8hz5/iyra6jAR77NufpFNT9PAVcwD7Zke9l3f72fsE3PefDq2D6yFzY4OkfuYc/Dh/hNmDee69cB93Fq6GyIwVEji2QTuV9tKkWbSH7FB0EOBQtB4iMzZ2Gz7E0YNurgEvjduLIW0D7AWv0OnPODNjZUnd5Bps2XX/SAvzGOZZRL/r1AXO3Fh09tpT6GGba6DGqY2yPXH2w7VnBpOdfbAN0ji9WLYn4+DbIBNAcFi529Y51mIWmwCGpSLWKxVoAoaGtOXIjcXopbpyS8uPF8fjwexlvyATgKNHmIXP0IJAgnvcA+SYgHC3RUZViYuz0YsVuV4pLfTr4lguGHoCKnFdYDzcYh+Y0485egs+AQSvOfoshfvYn9VDjt7OYA+Iv7wdSf3KPTBLcJ+jt16aNEM9K7CkB5U7FRVCCCGEEEIIIYQQQgghhBBCCCGEEEII0Wj8BW3/3m0HjJ8xAAAAAElFTkSuQmCC
在此成功解码

以下是解码图像数据的android端:

private Bitmap getCatBitmap() {

    byte[] decodedByte = null;

    try {
        decodedByte = Base64.decode(catB64Bitmap, Base64.DEFAULT);
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    }
    return BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length);
}


private BitmapDescriptor getIconMapFromCategory(int category) {

    Bitmap bm;

    BitmapDescriptor BMDesc;

    int mode = 1;

    if (mode == 0) {
        // works
        bm = drawableToBitmap(mActivity.getResources().getDrawable(R.drawable.logo_gm));

        BMDesc =  BitmapDescriptorFactory.fromBitmap(bm);

    } else {
        // Cause cluster to crash
        bm = site.getSiteCategoriesList().get(category).getCatBitmap();
        BMDesc = BitmapDescriptorFactory.fromBitmap(bm);
    }

    return BMDesc;
}
因此我执行以下代码:

markerOptions.position(sitePos)
.title(cursor.getString(cursor.getColumnIndex(SitesDBOpenHelper.KEY_NAME)))
.snippet(categoryName)
.icon(getIconMapFromCategory(category));

site.getMarkersList().put(Long.parseLong(cursor.getString(cursor.getColumnIndex(SitesDBOpenHelper.KEY_REMOTE_ID))),
        SiteMarker.getSiteMarkerInfos(
                Long.parseLong(cursor.getString(cursor.getColumnIndex(SitesDBOpenHelper.KEY_REMOTE_ID))),
                cursor.getString(cursor.getColumnIndex(SitesDBOpenHelper.KEY_TYPE)),
                markerOptions));

mClusterManager.addItem(site.getMarkersList().get(key));

mClusterManager.cluster();
此代码在呈现标记时崩溃。如果我将base64编码的图像替换为可绘制的位图,则标记将正确渲染

你能告诉我这里有什么问题吗

编辑:添加崩溃报告:并修改getIconMapFromCategory以更好地解释导致集群崩溃的案例

11-29 10:41:01.959 6283-6283/com.ndguide.ndguide E/AndroidRuntime: FATAL EXCEPTION: main
   Process: com.ndguide.ndguide, PID: 6283
   java.lang.NullPointerException
   com.google.a.a.ae.a(Unknown Source)
   com.google.maps.api.android.lib6.d.dn.<init>(Unknown Source)
   com.google.maps.api.android.lib6.d.dm.a(Unknown Source)
   com.google.maps.api.android.lib6.d.ag.<init>(Unknown Source)
   com.google.maps.api.android.lib6.d.eu.a(Unknown Source)
   com.google.android.gms.maps.internal.j.onTransact(SourceFile:167)
   android.os.Binder.transact(Binder.java:387)
   com.google.android.gms.maps.internal.IGoogleMapDelegate$zza$zza.addMarker(Unknown Source)
   com.google.android.gms.maps.GoogleMap.addMarker(Unknown Source)
   com.google.maps.android.MarkerManager$Collection.addMarker(MarkerManager.java:154)
   com.google.maps.android.clustering.view.DefaultClusterRenderer$CreateMarkerTask.perform(DefaultClusterRenderer.java:816)
   com.google.maps.android.clustering.view.DefaultClusterRenderer$CreateMarkerTask.access$2000(DefaultClusterRenderer.java:785)
   com.google.maps.android.clustering.view.DefaultClusterRenderer$MarkerModifier.performNextTask(DefaultClusterRenderer.java:624)
                                                                   at com.google.maps.android.clustering.view.DefaultClusterRenderer$MarkerModifier.handleMessage(DefaultClusterRenderer.java:596)
   android.os.Handler.dispatchMessage(Handler.java:102)
   android.os.Looper.loop(Looper.java:148)
   android.app.ActivityThread.main(ActivityThread.java:5417)
   java.lang.reflect.Method.invoke(Native Method)
   com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
   com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
但奇怪的是,在崩溃报告中,当我双击Binder.java:387时,它并不存在,我不会在一行代码和SourceFile:167中列出2个java文件,但第167行也不存在。
我能总结一下我使用的googleplayservices_lib上的问题吗?

你应该包括崩溃报告。@Tequilaman,是的,你是对的,我编辑了我的问题来添加它。很抱歉,我没有回答我的问题,但我切换到了OSMDroid,一切正常,我或者发现了比google maps api更酷的功能。
markerWithPosition2 = DefaultClusterRenderer.this.mClusterManager.getMarkerCollection().addMarker(markerOptions1);