2012-08-14 81 views
0

我正在使用某些Web服務的服務,它通常會返回JSON響應,但是當我發送用戶ID時會返回一個服務返回靜態GIF圖像(不是動畫)。Android/Java - 如何從Web服務中檢索圖像並將其顯示出來

,我做的程序是:

1.連接使用DefaultHttpClient
2.Convert InputStream中收到與此utilitary方法的String Web服務:

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。存儲轉換後的收到的字符串以處理服務器響應。

對於影像服務,當我看到轉換的字符串,它是這樣開始的: 「的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中我收到 「decoder->解碼返回false」

似乎沒有任何工作...的什麼是錯的任何想法?

謝謝!

+0

你當然應該被使用二進制數據結構爲您的圖像數據,而不是字符串?如果它是一個GIF,那麼你需要一個神解碼器 - 谷歌一個。 – davidfrancis 2012-08-14 22:21:15

+0

甚至Gif解碼器 - 該死的iPhone自動更正 – davidfrancis 2012-08-14 22:21:44

+0

你是說BitmapFactory.decode不適用於GIF文件?這是一個靜態的gif。謝謝你的回答。 – Spike777 2012-08-17 20:49:46

回答

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; 
} 

} 

AND:

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

問候

相關問題