Android,如何通过ksoap2将大量数据传输到Web服务? [英] Android, how transfer big amount of data to web service via ksoap2?

查看:63
本文介绍了Android,如何通过ksoap2将大量数据传输到Web服务?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我尝试向Web服务发送大量数据时,我遇到了一个大问题.我需要将大约20到30张照片发送到Web服务.我将所有照片转换为base64字符串,然后发送到Web服务.问题是当我发送1张照片是可以的,但是当我尝试发送2张或更多照片时,我的内存不足异常.
我的代码:

I have a big problem when I try to send big amount of data to web service. I need to send about 20-30 photos to web service. I convert all photo to base64 strings and send to web service. The problem is that when I send 1 photo is ok, but when I try to send 2 photo or more I have out of memory exception.
My code:

public boolean TransferAccidentFromGisToRarParameters(List<String> photos) {
    String METHOD_NAME = "TransferAccidentFromGisToRarParameters";
    String SOAP_ACTION = NAMESPACE + METHOD_NAME;
    request = new SoapObject(NAMESPACE, METHOD_NAME);
    envelope.setOutputSoapObject(request);

    SoapObject photosList = new SoapObject(NAMESPACE, "accidentPhotos");

    for (String string : photos) {
        photosList.addProperty("string", string);
    }
    request.addSoapObject(photosList);
    try {
        androidHttpTransport.call(SOAP_ACTION, envelope);
        SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
        return Boolean.parseBoolean(response.toString());
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
}


其中:照片-base64字符串列表

我的网络服务代码块(asmx网络服务):


Where: photos - a list of base64 strings

My web service code block (asmx web service):

[WebMethod]
public bool TransferAccidentFromGisToRarParameters(string[] accidentPhotos)
{
    try
    {
        foreach (var photo in accidentPhotos)
        {
            var byteArray = Convert.FromBase64String(photo);
            var accidentMedia = new AccidentMedia { Content = byteArray};
            entities.media_accidents.AddObject(accidentMedia);
        }
        entities.SaveChanges();
        return true;
    }
    catch (Exception exc)
    {
        return false;
    }
}


这是Android日志中的例外:


This is exceptions in Android log:

FATAL EXCEPTION: AsyncTask 
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:278)
at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
Caused by: java.lang.OutOfMemoryError
at java.nio.CharBuffer.put(CharBuffer.java:509)
at java.nio.charset.CharsetDecoder.allocateMore(CharsetDecoder.java:238)
at java.nio.charset.CharsetDecoder.decode(CharsetDecoder.java:195)
at java.nio.charset.Charset.decode(Charset.java:487)
at java.lang.String.<init>(String.java:174)
at java.lang.String.<init>(String.java:141)
at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:121)
at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:95)
at com.rossoft.epolice.services.GisWebService.TransferAccidentFromGisToRarParameters(GisWebService.java:191)
at com.rossoft.epolice.asynctaskwrappers.AsyncTaskTransferAccidentWrapper.doInBackground(AsyncTaskTransferAccidentWrapper.java:48) 
at com.rossoft.epolice.asynctaskwrappers.AsyncTaskTransferAccidentWrapper.doInBackground(AsyncTaskTransferAccidentWrapper.java:1) 
at android.os.AsyncTask$2.call(AsyncTask.java:264) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
</small>


我很高兴为您解答.最好的问候!


I''ll be glad for your answers. Best regards!

推荐答案

3.done(AsyncTask.java: 278 ) 在java.util.concurrent.FutureTask
3.done(AsyncTask.java:278) at java.util.concurrent.FutureTask


Sync.innerSetException(FutureTask.java: 273 ) 在java.util.concurrent.FutureTask.setException(FutureTask.java: 124 ) 在java.util.concurrent.FutureTask
Sync.innerSetException(FutureTask.java:273) at java.util.concurrent.FutureTask.setException(FutureTask.java:124) at java.util.concurrent.FutureTask


Sync.innerRun(FutureTask.java: 307 ) 在java.util.concurrent.FutureTask.run(FutureTask.java: 137 ) 在android.os.AsyncTask
Sync.innerRun(FutureTask.java:307) at java.util.concurrent.FutureTask.run(FutureTask.java:137) at android.os.AsyncTask


这篇关于Android,如何通过ksoap2将大量数据传输到Web服务?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆