我是Android开发的新手。我正在尝试构建一个Android客户端,它向发送JSON的.NET Web发出请求。
我正在使用:
我正在尝试用JSON请求一个http PUT,服务器端的Web获得了http请求,但是它找不到任何JSON,所以我肯定丢失了一些我看不到的东西。我甚至考虑过它在这里说了什么:How to stream a JSON object to a HttpURLConnection POST request关于使用connect()方法,尽管HttpURLConnection文档没有提到它。
我的代码:
public void sendData(final String id, final int count, final MobileData myData)
throws WebApiException {
HttpURLConnection urlConnection = null;
final String urlSend = "http://myIISapi" + "/" + id + "?count=" + count;
try {
final URL url = new URL(urlSend);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setDoOutput(true);
urlConnection.setChunkedStreamingMode(0); //gets system default chunk size
urlConnection.setRequestMethod("PUT");
urlConnection.setRequestProperty("Content-Type", "application/json");
urlConnection.setRequestProperty("Accept", "application/json");
urlConnection.connect(); //necessary?
final OutputStream outputStream = new BufferedOutputStream(urlConnection.getOutputStream());
final JsonWriter writer = new JsonWriter(new OutputStreamWriter(outputStream, "UTF-8"));
writer.setIndent(" ");
Gson gson = new Gson();
//String parsed = gson.toJson(amsData, MobileAmsData.class);
gson.toJson(myData, MobileData.class, writer);
writer.flush();
writer.close();
final int statusCode = urlConnection.getResponseCode();
LOG.info("sendData server responded with status code = " + statusCode);
if (HttpURLConnection.HTTP_OK != statusCode) {
throw new WebApiException("Server did not accept data. Status code: " + statusCode);
}
}
catch (Exception e) {
throw new WebApiException("Unable to send PUT request", e);
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
}
}
}我是不是漏掉了一些强制性的标题?我对发送JSON的流方式有点困惑,所以问题可能在那里。最后,是否有可能通过这样的流数据,实际上有多个HTTP请求,而服务器应该考虑数据正在流?还是流仅在客户端以构建单个http请求的方式发生?
谢谢你们!
编辑:,如果我明确地对JsonWriter说
writer.beginObject();
在
gson.toJson(myData,MobileData.class,作者);
然后它会抛出一个IllegalStateException嵌套问题。为了澄清这一点,我试图使用混合GSON写作来利用混合流和对象模型访问。因此,我试图获取MobileAmsData复杂对象,将其序列化为JSON,并将其放到远程服务器上。
EDITED2:如果使用
字符串解析= gson.toJson(myData,MobileData.class);
{
"Things1":[
],
"Things2":[
],
"Things3":[
],
"Things4":[
],
"Things1Count":0,
"Things2Count":0,
"Things3Count":0,
"Things4Count":0,
"Count":2,
"BarcodeCount":1
}发布于 2014-09-30 02:45:28
在这里挣扎了很多之后,我发现:
urlConnection.setChunkedStreamingMode(0);
总之,上面的代码可以使用GSON将JSON流发送到输出流并使用块编码传输发送HTTP请求.但是如果内存使用是个问题的话,那么它的代码效率就不高,应该重新工作来逐行序列化。
https://stackoverflow.com/questions/26108722
复制相似问题