У меня проблемы с загрузкой изображений в Android.
Я использую apache httpmime 4.1 lib код такой:
MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
reqEntity.addPart("image", new FileBody(new File(AndorraApplication.getPhotosPath() + "/" + entity.getFileName()), "image/jpeg"));
resp = NetworkUtils.sendHttpRequestMultipart(EXPORT_PHOTOS_URI, reqEntity);
NetworkUtils class:
public class NetworkUtils {
public static final int REGISTRATION_TIMEOUT = 3 * 1000;
public static final int WAIT_TIMEOUT = 5 * 1000;
public static HttpResponse sendHttpRequestMultipart(String uri, MultipartEntity entity) {
HttpClient mHttpClient = new DefaultHttpClient();
final HttpParams params = mHttpClient.getParams();
HttpConnectionParams.setConnectionTimeout(params, REGISTRATION_TIMEOUT);
HttpConnectionParams.setSoTimeout(params, WAIT_TIMEOUT);
ConnManagerParams.setTimeout(params, WAIT_TIMEOUT);
HttpPost post = new HttpPost(uri);
post.addHeader(entity.getContentType());
post.setEntity(entity);
HttpResponse resp = mHttpClient.execute(post);
}
}
иногда все работает нормально, но иногда (особенно при медленном соединении) изображение загружается очень испорченным. пример здесь: http://pixelbirthcloud.com/574_orig.jpg
он не генерирует никаких исключений. длина загруженного файла такая же, как и у оригинального .. попытался изменить тип mime на application / octet-stream или удалить его вообще. пытается играть с таймаутами. все тот же результат. конечные пользователи загружают испорченные изображения почти все время (хотя мне удавалось получить изображения bronem только 2 раза) .. размер изображения сначала был 2,5 мегабайта, но затем я уменьшил его до 500-700 кб. не устранил проблему.
не пытался изменить библиотеку apache ... возможно, это проблема ... но насколько я читал в сети, никто не сталкивался с этим с библиотекой httpmime.
что это может быть? я совершенно заблудился: (
другая проблема в том, что таймауты иногда не работают.
например, когда дело доходит до этой строки: HttpResponse resp = mHttpClient.execute (сообщение); и я отключаю соединение 3g, он просто ждет 17-20 минут вместо 3 или 5 секунд .. и только тогда выдает исключение. пробовал разные способы. вот так:
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
HttpProtocolParams.setUseExpectContinue(params, false);
HttpConnectionParams.setConnectionTimeout(params, 10000);
HttpConnectionParams.setSoTimeout(params, 10000);
ConnManagerParams.setMaxTotalConnections(params, 5);
ConnManagerParams.setTimeout(params, 30000);
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http",PlainSocketFactory.getSocketFactory(), 80));
registry.register(new Scheme("https",PlainSocketFactory.getSocketFactory(), 80));
ThreadSafeClientConnManager manager = new ThreadSafeClientConnManager(params, registry);
HttpClient httpclient = new DefaultHttpClient(manager, params);
но все равно не работает :)