Проблемы с памятью при публикации файлов с Android - PullRequest
3 голосов
/ 06 сентября 2011

Когда я пытаюсь загрузить изображения или файлы большего размера из моего приложения для Android, происходит сбой OutOfMemoryException.Мне интересно, есть ли альтернативные способы сделать это.

У меня был сбой приложения в двух разных местах:

Base64.encodeToString(bytes, Base64.DEFAULT);

И здесь, где строка base64 является одним из значений в коллекции nameValuPairs.

HttpClient client = new DefaultHttpClient();
HttpPost httppost = new HttpPost(uo.WebServiceURL);
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(nameValuePairs); // On this line
httppost.setEntity(entity);
HttpResponse response = client.execute(httppost);

Есть идеи?

Ответы [ 2 ]

6 голосов
/ 06 сентября 2011

Если вы сделаете это таким образом, весь POST должен быть помещен в буфер.Это потому, что сначала нужно отправить заголовок Content-Length.

Вместо этого я думаю, что вы хотите использовать HTTP-библиотеки Apache, включая http://developer.android.com/reference/org/apache/http/entity/FileEntity.html.Это позволит ему определить длину перед чтением файла.Вы можете использовать этот ответ в качестве отправной точки.Но вторым параметром конструктора FileEntity должен быть тип MIME (например, image / png, text / html и т. Д.).

Отправка большого файла в Android

Проверьте это также .........

Как говорит Шнаппл, ваш вопрос кажется очень широким и запутанным для чтения и понимания.

Вот некоторый общий код дляотправьте HTTP POST и получите ответ от сервера, хотя это может быть полезно.

public String postPage(String url, File data, boolean returnAddr) {

    ret = null;

    httpClient.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.RFC_2109);

    httpPost = new HttpPost(url);
    response = null;

    FileEntity tmp = null;       

    tmp = new FileEntity(data,"UTF-8");

    httpPost.setEntity(tmp);

    try {
        response = httpClient.execute(httpPost,localContext);
    } catch (ClientProtocolException e) {
        System.out.println("HTTPHelp : ClientProtocolException : "+e);
    } catch (IOException e) {
        System.out.println("HTTPHelp : IOException : "+e);
    } 
            ret = response.getStatusLine().toString();

            return ret;
}
0 голосов
/ 06 сентября 2011

Поскольку размер изображения слишком велик, есть некоторые объяснения того, как решить эту проблему, я укажу на вопрос, который уже был задан.

Странно нехватка памяти при загрузке изображения в растровый объект

надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...