使用org.apache.http库时,部分帖子数据丢失了

时间:2014-12-11 11:07:48

标签: android post apache-httpclient-4.x

我遇到一些问题,我们的服务器收到的帖子数据不完整。这仅适用于我们应用的少数用户。仍然不确定我们正在谈论的Android版本,但会尽快恢复该信息。 目前:也许有人也经历过类似的问题?它仅适用于我们的textarea字段,用户可以在其中键入大型自定义文本。此字段没有任何过滤器,将作为StringBody直接发送到我们的服务器。以下代码是相关部分。我关心的是创建StringBody的部分。这是否足以正确地转义文本以不干扰帖子标题?

MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
for(int j=0; j<fields.length; j++){
    String value = mydata.get(fields[j]);
    entity.addPart(fields[j], new StringBody(value, "text/plain", Charset.forName("UTF-8")));
}

(..) //some files are added too later on

entity.addPart(image.get("hash"), new FileBody(imageFile));

(..) //and sending the data to the server
HttpPost post = new HttpPost(url);
if(entity != null)
    post.setEntity(entity);

final HttpClient http = new DefaultHttpClient();
final HttpParams params = http.getParams();
HttpConnectionParams.setConnectionTimeout(params, 10000);
HttpConnectionParams.setSoTimeout(params, 30000);
ConnManagerParams.setTimeout(params, 30000);

HttpResponse response = http.execute(post);
StatusLine statusLine = response.getStatusLine();
if(statusLine.getStatusCode() != HttpStatus.SC_OK){
    response.getEntity().getContent().close();
    throw new IOException(statusLine.getReasonPhrase());
}

ByteArrayOutputStream out = new ByteArrayOutputStream();
response.getEntity().writeTo(out);
out.close();
String result = out.toString();

1 个答案:

答案 0 :(得分:0)

终于解决了这个问题。问题不在于前端,而在后端。人们发布了unicode emoticons。后端使用MySQL utf8_general_ci排序表/列构建。此排序规则不支持unicode字符,并将在unicode字符之前中断文本。因此,生成的插入将在unicode字符后缺少所有文本。