2012-02-22 3 views
0

Im пытается получить изображение с помощью webservice и сохранено на SD-карте. Файл сохранен, но я не смог открыть файл. Как только я открою файл, он сказал, что «невозможно загрузить изображение». Ниже мой код.файл не сохраняется правильно

httpTransport.call(SOAP_ACTION, envelope); 
Object response = envelope.getResponse(); 
test = response.toString(); 
Blob picture = org.hibernate.Hibernate.createBlob(test.replaceAll("-", "").getBytes()); 
String FILENAME = "voucher1.jpg"; 
File root = Environment.getExternalStorageDirectory(); 
FileOutputStream f = new FileOutputStream(new File(root, FILENAME)); 
InputStream x=picture.getBinaryStream(); 
int size=x.available(); 
byte b[]= new byte[size]; 
x.read(b); 
f.write(b); 
f.close(); 

Просьба помочь. Спасибо

+0

Каково содержание теста и почему вы бы заменили '-' на ''? – njzk2

+0

его байт [], который я конвертирую в строку в webservice и возвращаю значение здесь. Причина, по которой я заменяю «-», потому что когда я проверил тестовую строку ... по умолчанию было «-» ... –

+0

это может быть проблемой. byte [] -> String -> byte [] не работает, если вы используете разные кодировки, что очень вероятно. Кроме того, в чем смысл создания Blob? И если вы удалите все дефисы, вы потеряете части своего файла – njzk2

ответ

0

Я изменил format..instead использование веб-сервиса, я просто использовать URL изображения для получения изображения, и это работает ...

я попробовать это и его работу отлично. Благодарю.

URL url = new URL(fileURL); 
URLConnection conexion = url.openConnection(); 
conexion.connect(); 
int lenghtOfFile = conexion.getContentLength(); 
Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile); 
InputStream input = new BufferedInputStream(url.openStream()); 
OutputStream output = new FileOutputStream("/sdcard/caldophilus.jpg"); 
byte data[] = new byte[1024]; 
long total = 0; 
while ((count = input.read(data)) != -1) { 
total += count; 
output.write(data, 0, count); 
} 
output.flush(); 
output.close(); 
input.close(); 
-1

Я предполагаю, что вам нужно позвонить f.flush(), чтобы выписать все данные в потоке в файл.

f.flush(); 
f.close(); 
+0

nope ... same issue .. –

+0

Документация: «Этот поток не буферизирован. Большинство абонентов должны обернуть этот поток BufferedOutputStream». Закрытие потока достаточно, чтобы все было сброшено – colithium