0

我正在使用通常返回 JSON 响应的 Web 服务的一些服务,但是当我发送用户 ID 时,一项服务返回静态 GIF 图像(非动画)。

我正在做的程序是:

1.使用 DefaultHttpClient 连接到 Web 服务
2.使用此实用方法将接收到的 InputStream 转换为字符串:

public static String inputStreamToStringScanner(InputStream in) {

  Scanner fileScanner = new Scanner(in);
  StringBuilder inputStreamString = new StringBuilder();
  while(fileScanner.hasNextLine())
    inputStreamString.append(fileScanner.nextLine()).append("\n");
  fileScanner.close();

  return inputStreamString.toString();
}

3.存储转换后的接收到的String,用于处理服务器响应。

对于图像服务,当我看到转换后的字符串时,它的开头是这样的:“GIF89a?��?�� ...”

这是一个静态 GIF 文件。

我无法在 ImageView 中显示图像,我尝试了在网络上找到的不同方法:

public void onPhotoFinished (String responseData) {

  InputStream is = new ByteArrayInputStream(responseData.getBytes());
  Bitmap bm = BitmapFactory.decodeStream(is);
  userImage.setImageBitmap(bm);
}

这是我也尝试过的其他东西:

public void onPhotoFinished (String responseData) {

  InputStream is = new ByteArrayInputStream(responseData.getBytes());
  final Bitmap bm = BitmapFactory.decodeStream(new BufferedInputStream(is));
  userImage.setImageBitmap(bm);
}

这也不起作用:

public void onPhotoFinished (String responseData) {

  InputStream is = new ByteArrayInputStream(responseData.getBytes());
  Drawable d = Drawable.createFromStream(is, "src name");
  userImage.setImageDrawable(d);
}

最后,这也不起作用:

public void onPhotoFinished (String responseData) {

  Bitmap bm = BitmapFactory.decodeByteArray(responseData.getBytes(), 0, responseData.getBytes().length);
  userImage.setImageBitmap(bm);
}

在 Logcat 我收到“解码器->解码返回假”

似乎没有任何效果......关于什么是错的任何想法?

谢谢!

4

1 回答 1

1

最后,我使用 FlushedInputStream 解决了它,并直接使用输入流,避免转换为字符串:

static class FlushedInputStream extends FilterInputStream { 

public FlushedInputStream(InputStream inputStream) {
    super(inputStream);
}

@Override
public long skip(long n) throws IOException { 

  long totalBytesSkipped = 0L;
  while (totalBytesSkipped < n) { 
    long bytesSkipped = in.skip(n - totalBytesSkipped);
    if (bytesSkipped == 0L) { 
      int byteReaded = read();
      if (byteReaded < 0) {
          break; 
      } else {
          bytesSkipped = 1;
      }
    }
    totalBytesSkipped += bytesSkipped;
  }
  return totalBytesSkipped;
}

}

和:

Bitmap bitmapResponseData = BitmapFactory.decodeStream(new FlushedInputStream(is));

问候

于 2012-08-21T17:16:33.570 回答