OutOfMemoryError в приложении Android при вызове веб-службы - PullRequest
3 голосов
/ 28 мая 2011

Пожалуйста, помогите ....

Я вызываю метод веб-службы, который возвращает большой объект мыла, и получаю OutOfMemoryException.

Как мне избежатьтот?Есть ли способ сделать это?

SoapSerializationEnvelope envelope = new    SoapSerializationEnvelope(SoapEnvelope.VER11);           
envelope.dotNet=true;  
envelope.setOutputSoapObject(request);  
try  {     
    httpTransport.call(SOAP_ACTION, envelope);// Here I am getting error 
}   
catch(Exception e){} 

Я ценю любую помощь.С уважением, Леонардо

Ответы [ 2 ]

1 голос
/ 21 июня 2011

Android-устройства имеют очень маленький размер кучи (около 16 МБ), поэтому, если ваш SOAP-ответ возвращает много данных, чтение и преобразование всех этих данных в объекты мыла может привести к тому, что ваше устройство выбросит из памяти ошибку.

Я столкнулся с подобной проблемой, самый простой подход заключается в том, чтобы сделать следующее

  1. Когда ваш ответ мыла получен, сохраните его в формате XML на диске
  2. , а затем используйтеСинтаксический анализатор XML для получения любых данных из XML, которые вы хотите (создать объекты или сохранить в БД)

Так я решил проблему - Очень большой ответ SOAP - Android - изошибка памяти

0 голосов
/ 28 мая 2011

Если вы получаете много данных, лучше всего использовать поток для них. Используйте поток с диалоговым окном прогресса, это будет более удобным для пользователей, которым не придется ждать и видеть, что приложение «зависло» или что-то в этом роде.

Пример (просто чтобы показать вам, что я имею в виду, вам придется использовать его так, как вы хотите):

public class YourActivity extends Activity implements Runnable {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    // Your code...
    SoapSerializationEnvelope envelope = new    SoapSerializationEnvelope(SoapEnvelope.VER11);           
    envelope.dotNet=true;  
    envelope.setOutputSoapObject(request); 

    // Running the thread
    Thread thread = new Thread(this);
    thread.start();
}

@Override
public void run() {
    try  {     
        httpTransport.call(SOAP_ACTION, envelope);// Here I am getting error 
    }   
    catch(Exception e){} 
}

Удачи!

...