Android,如何通过ksoap2将大量数据传输到Web服务? [英] Android, how transfer big amount of data to web service via ksoap2?
问题描述
当我尝试向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屋!