Проблема с Android HttpRequest - PullRequest
       13

Проблема с Android HttpRequest

0 голосов
/ 07 сентября 2011

Привет! Я использую HttpPost и HttpRequest для подключения к серверу и получения результата. Я получаю результат в виде строки и пытаюсь преобразовать его в byte[]. Но когда я делаю это, результат, который я получаю как String и byte[], отличается. Как я могу это исправить? Вот код, который я использую:

public class TestProjectActivity extends Activity {

    Button cancel,login;
    HttpClient httpclient;
    HttpPost httppost;
    ArrayList<NameValuePair> postParameters;

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        httpclient = new DefaultHttpClient();
        httppost = new HttpPost("http://www.rpc.example.com");

        postParameters = new ArrayList<NameValuePair>();
        postParameters.add(new BasicNameValuePair("username_hash", "c34a6cf6bff9f6b61e96fdf4bf360157d522a17c"));
        postParameters.add(new BasicNameValuePair("password_hash", "56dc55f0062cf21797637b0f8652293023f2ef22"));

        cancel = (Button) findViewById(R.id.cancel_login_btn);
        cancel.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                finish();
            }
        });

        login = (Button) findViewById(R.id.login_btn);
        login.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                try {
                    httppost.setEntity(new UrlEncodedFormEntity(postParameters));

                    HttpResponse response = httpclient.execute(httppost);
                    String responseBody = EntityUtils.toString(response.getEntity()); //response
                    byte[] b = responseBody.getBytes();
                    Log.e("Packet","Response packet : "+b); //print packet
                    Log.e("Packet","Response packet : "+responseBody); //print packet





                } catch (Exception e) {
                    e.printStackTrace();
                    Log.d("ERROR"," Error lol - "+e);
                }

            }
        });
    }
}

Результат в виде строки: Response packet : 00000000000000000000000000000001002001ec8ce6abb3e952a85b8551ba726a122700000000000000000000000000000002000000000000000000000000000001162c1c0624f7a2b272e05c4d997473a8e6001eyJsb2NhbGUiOiJlbl9VUyIsImlkIjoyLCJlcnJvcl9jb2RlIjo2MDAzLCJlcnJvcl9zdHJpbmciOiJVbnN1cHBvcnRlZCBDbGllbnQgVmVyc2lvbiJ9

Результат в байтах []: Response packet : [B@462d93c0

Ответы [ 2 ]

1 голос
/ 07 сентября 2011

byte[].toString() всегда печатает "[B@...".

Использование Log.e("Packet","Response packet : "+ new String(b, "UTF-8")); //print packet

Это создаст новый String от вас byte[] (что вам на самом деле не нужно делать, поскольку вы уже получили его от другого метода, который вызываете).

0 голосов
/ 07 сентября 2011

Вам нужно будет установить правильную кодировку строки ответа, например:

byte[] b = responseBody.getBytes("UTF-8");
...