我将从base64格式的图像从PHP发送到Android。 在android方面,以前当我是entity.toString()时它工作正常。 我能够解码结果并创建一个位图。 但现在我想跟踪图像的下载量。所以我使用response.getHeaders(" Content-Length")和entity.getContent(); 从InputStream我将它读入byte []数组。我怎么读过,我把它转换成一个字符串。并附加到最终的image_base64 问题是我没有在最终的String中获得相同的原始base64值。 还有其他办法吗?
buf = new byte[totalSize];
do {
numBytesRead = stream.read(buf, numBytesRead, totalSize);
String temp = Base64.encodeToString(buf,Base64.DEFAULT);
image_base64 = image_base64 + temp;
buf = new byte[totalSize];
if (numBytesRead > 0) {
downloadedSize += numBytesRead;
dialog.setProgress((downloadedSize/totalSize)*100);
}
} while (numBytesRead > 0);
答案 0 :(得分:1)
为什么甚至根本使用base64?为什么不在PHP中按原样输出图像并使用Android上的字节数组呢?为什么要浪费带和处理能力?
base64字符串不匹配的原因可能是因为您收到它时编码而不是解码。
< / LI>你不能只编码/解码base64字符串的一部分,你需要拥有整体。
在downloadedSize
中使用numBytesRead
代替stream.read
,否则您将覆盖以前收到的数据。
所以,如果你真的想使用base64:
buf = new byte[totalSize];
while(downloadedSize < totalSize)
{
numBytesRead = stream.read(buf, downloadedSize, totalSize);
if(numBytesRead > 0)
{
downloadedSize += numBytesRead;
dialog.setProgress((downloadedSize/totalSize)*100);
}
}
image_base64 = new String(buf);
// Now base64-decode it