0

わかりません:Androidでは、stringbodyに入力した完全な文字列が返されません。文字列が完全に保存されていることを確認しましたが、文字列本体に渡されると壊れてしまいます。同じアプリケーションのデスクトップバージョンでは、結果は成功します。しかし、Androidでは、文字列の最後のランダムな部分が失われます。結果の文字列が失われた後に保存しようとすると、文字列は同じ場所に保存されます。アクセントや特殊文字は使用しません。テストからの例:

最初の書き込み:

これは、私が外出先で書いているランダムなメッセージを含むテストバイオです。これが私が期待しているようにカットされた場合、何かが省略されるだろうと思っています。何が起こるか見てみましょう。

1回の保存でこれが保存されます。

これは、私が外出先で書いているランダムなメッセージを含むテストバイオです。これが私が何かが取り残されることを期待しているようにカットされた場合

2番目の保存:

これは、私が外出先で書いているランダムなメッセージを含むテストバイオです。これが私のようにカットされた場合

コードは

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();
    }
4

2 に答える 2

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 "";
        }
    }
}
于 2012-06-20T19:25:34.303 に答える
0

合理的な解決策がなかったので、私は散歩をしました。削除される末尾は常に5〜13文字であることがわかりました...したがって、文字列の末尾に15#を追加し、サーバー側で削除します。きれいではありませんが、機能します。

于 2012-06-23T01:57:22.803 に答える