StringBody没有得到完整的字符串

时间:2012-06-20 17:29:46

标签: java android apache entity http-post

我不明白:在android中,我没有得到返回的完整字符串,我输入了stringbody。我已经检查过字符串是完全保存的,但是当它传递给字符串时它就会中断。在同一应用程序的桌面版本中,结果是成功的。但在Android中,字符串末尾的随机部分会丢失。如果我尝试在丢失后保存结果字符串,则字符串将保存在同一位置。我不使用任何口音或特殊字符。 来自测试的示例:

首先写:

  

这是一个带有随机消息的测试生物,我正在写作。   如果这被削减,就像我期待的东西将会被遗忘   出。让我们看看会发生什么。

一次保存可以保存:

  

这是一个带有随机消息的测试生物,我正在写作。   如果这个被削减,就像我期待的东西将被遗漏

第二次保存:

  

这是一个带有随机消息的测试生物,我正在写作。   如果这像我一样被削减

代码是

protected void gravarPerfil() throws UnsupportedEncodingException {

    MultipartEntity entity = new MultipartEntity();
    StringBody sAcerca = null, sLoc = null;

    DefaultHttpClient client = new DefaultHttpClient();
    if (cookie != null) {
        client.getCookieStore().addCookie(cookie);
    }

    HttpPost post = new HttpPost(address + "/dinamicas/editarPerfil");

    FileBody imagebin = null;

    if (imgfile != null) {
        imagebin = new FileBody(imgfile);
    }

    Log.v("msg", acerca.getText().toString());

这是我的文件体不加载整个字符串的部分

    sAcerca = new StringBody(acerca.getText().toString());
    sLoc = new StringBody(local.getText().toString());


    try {

        entity.addPart("acerca", sAcerca);
        entity.addPart("localizacao", sLoc);
        if (imgfile != null) {
            entity.addPart("foto", imagebin);
        }

        post.setEntity(entity);

        HttpResponse response = client.execute(post);


    } catch (Exception e) {
        e.printStackTrace();
    }

2 个答案:

答案 0 :(得分:0)

你的意思是最后的日志行给你一些奇怪的东西吗?:

 Log.v("msg", response.toString());

因为它会。

试试这个:

InputStream responseStream = response..getEntity().getContent();
String textResponse = StreamConverter.convertStreamToString(responseStream);
Log.v("msg", "Received:"+ textResponse);


public class StreamConverter {

    public static String convertStreamToString(InputStream inputStream) throws IOException {
        if (inputStream != null) {
            Writer writer = new StringWriter();

            char[] buffer = new char[1024];
            try {
                Reader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"),1024);
                int n;
                while ((n = reader.read(buffer)) != -1) {
                    writer.write(buffer, 0, n);
                }
            } finally {
                inputStream.close();
            }
            return writer.toString();
        } else {
            return "";
        }
    }
}

答案 1 :(得分:0)

没有任何合理的解决方案,所以我应用了一下。我发现删除的末尾总是在5到13个字符之间......所以我在字符串末尾添加15#,然后在服务器端删除。它不漂亮,但它的工作原理。