试图从服务器接收位图字符串

时间:2016-02-19 12:32:41

标签: php android bitmap

我将String位图上传为“用户个人资料图片”。使用php上传到服务器都很好,从服务器下载也是如此。问题是,当我在查看位图字符串时,我看到小箭头,我不知道为什么会发生这种情况。

我发送的字符串位图(后编码):1

和我正在接收的字符串位图(预先解码):[2]我把它交给了以下内容,因为我是新来的,他们不要让我超过1个链接

我想也许我没有处理好从PHP读取字符串。如果需要,我可以将代码粘贴到我做的地方。

感谢帮助人员!

[编辑]

从php接收我的字符串的代码:

        StringBuilder sb = new StringBuilder();
        reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
        String line;
        while ((line = reader.readLine()) != null) { 
            sb.append(line + "");
        }
        line = sb.toString();

一旦我用逗号分隔线:(即时接收smth,如“name”:“john”,“age”=“5”,...,“bitstringImag”=“/ 9j / 4AA ..”)

我得到了Bitmap String值:

String[] bitmstrIn = kvPairs[5].split(":"); //separating the key from the value
            String[] bitmstrIn2 = bitmstrIn[1].split("\\}");  //erasing last key in the String
            String bitStr = bitmstrIn2[0].replaceAll("\"", ""); //removing the added (i dont know why) backslash.
            String biStrFin = bitStr.replaceAll("\\\\","");//removing the added (i dont know why) backslash.

并且bitStrFin中的结果是我粘贴到评论中的结果。

谢谢!

1 个答案:

答案 0 :(得分:0)

我实现了一种类似的方法,使用服务器端的bin2hex功能从Android上的PHP服务器接收图像。我们来看看代码:

获取JSON的十六进制字符串后,我们将其转换为ByteArray:

/**
 * Converts a hexadecimal string to byte array.
 *
 * @param s String to convert.
 * @return The result of conversion.
 */
 public static byte[] hexStringToByteArray(String s) {
    int len = s.length();
    byte[] data = new byte[len / 2];
    for (int i = 0; i < len; i += 2) {
        data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                + Character.digit(s.charAt(i+1), 16));
    }
    return data;
 }

然后从ByteArray创建一个新的Bitmap:

/**
 * Decode an immutable bitmap from the specified byte array.
 *
 * @param data byte array of compressed image data
 * @param offset offset into imageData for where the decoder should begin parsing.
 * @param length the number of bytes, beginning at offset, to parse
 * @return The decoded bitmap, or null if the image could not be decoded.
 */ 
BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);

结果可以使用imageView.setImageBitmap(Bitmap)方法将Bitmap加载到ImageView中。