Android 提出大量的休息请求

Android 提出大量的休息请求,android,rest,Android,Rest,我有一个无法更改的REST服务,它包含上传图像的方法,编码为Base64字符串 问题是图像的大小可能会达到5-10MB,甚至更多。当我试图在设备上构建这种大小的图像的Base64表示时,我得到一个OutOfMemory异常 但是,我可以一次对字节块进行编码(比方说3000个字节),但这是无用的,因为我需要整个字符串来创建HttpGet/HttpPost对象: DefaultHttpClient client = new DefaultHttpClient(); HttpGet httpGet =

我有一个无法更改的REST服务,它包含上传图像的方法,编码为Base64字符串

问题是图像的大小可能会达到5-10MB,甚至更多。当我试图在设备上构建这种大小的图像的Base64表示时,我得到一个OutOfMemory异常

但是,我可以一次对字节块进行编码(比方说3000个字节),但这是无用的,因为我需要整个字符串来创建HttpGet/HttpPost对象:

DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("www.server.com/longString");
HttpResponse response = client.execute(httpGet);
有办法解决这个问题吗

编辑:尝试使用Heiko Rupp的建议+android文档,我在以下行得到一个异常(“java.io.FileNotFoundException:”):InputStream in=urlConnection.getInputStream()

我错过什么了吗?我需要执行的GET请求如下所示:
"http://myRESTService.com/myMethod?params=LOOONG-“字符串”,所以想法是连接到http://myRESTService.com/myMethod 然后一次输出几个长字符串字符。这是否正确?

您应该尝试使用
URLConnection
而不是apache http客户端,因为这不需要您将要发送的对象保存在内存中,而是可以执行以下操作:

伪代码

HttpUrlConnection con = restUrl.getConnection();
while (!done) {
  byte[] part = base64encode(partOfImage);
  con.write (part);
  partOfImage = nextPartOfImage();
}
con.flush();
con.close();
同样在Android 2.2之后,谷歌建议通过http客户端使用
URLConnection
。请参见的说明


您可能还需要了解发送的数据量。通过移动网络传输10 MB+base64将需要相当长的时间(即使使用gzip压缩,
URLConnection
透明地启用gzip压缩,如果服务器端接受它)。

您必须阅读此REST服务的文档,这样的服务不会要求您在GET中发送如此长的数据。图像总是以邮寄方式发送。POST数据始终位于请求的末尾,并允许以迭代方式添加。

此服务没有文档。即使有,我们也可能无法访问它们。此REST服务afaik是为旧SOAP服务添加的新包装。。您是否检查过此服务器是否接受如此长的URL?大多数服务器最多只能接受几个KB长的URL。感谢您的反馈。然而,我在使用这种方法时遇到了麻烦。。如果不看回复,我无法知道请求是否通过。我该怎么做?你能检查我问题的编辑部分吗?你需要告诉服务使用put或post,例如通过con.setMethod(“post”)
HttpUrlConnection con = restUrl.getConnection();
while (!done) {
  byte[] part = base64encode(partOfImage);
  con.write (part);
  partOfImage = nextPartOfImage();
}
con.flush();
con.close();