Android Java - преобразовать результат HttpPost в byte [] - PullRequest
1 голос
/ 07 сентября 2011

Я пытаюсь получить результат HttpPost от сервера и преобразовать его в байтовый массив и получить конкретные байты из byte[].Пока я использую этот код, и он работает.Мне нужно изменить это на то, что я хочу сделать.Вот код:

public class UserLogin extends Activity {

    Button cancel,login;
    HttpClient httpclient;
    HttpPost httppost;
    ArrayList<NameValuePair> postParameters;
    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);
        httpclient = new DefaultHttpClient();
        httppost = new HttpPost("http://www.rpc.test.com");

        postParameters = new ArrayList<NameValuePair>();
        //postParameters.add(new BasicNameValuePair("new_auth_data","1"));
        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);
                    Log.d("Login", "Response " + response.getEntity());

                    String responseBody = EntityUtils.toString(response.getEntity());
                    byte[] b = responseBody.getBytes();
                    // here




                    new AlertDialog.Builder( UserLogin.this )
                    .setTitle( "Warning" )
                    .setMessage( responseBody )
                    .setPositiveButton( "Ok", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            Log.d("AlertDialog", "Positive");
                        }
                    })
                    .show();

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

            }
        });
    }
}

В результате этого HttpPost я получаю строку, которую мне нужно преобразовать в байт, как я сделал, и получить из нее конкретные байты.элемент до 25 или что-то вроде этого.Любые предложения, как я могу это сделать?

Заранее спасибо за все предложения и помощь.

Ответы [ 3 ]

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

извлечение подмассива из массива выполняется с помощью arrayCopy http://developer.android.com/reference/java/lang/System.html#arraycopy%28java.lang.Object,%20int,%20java.lang.Object,%20int,%20int%29

для элементов с 15 по 25:

byte[] subarray = new byte[25-15];
System.arrayCopy(b, 15, subarray, 0, subarray.length);
1 голос
/ 07 сентября 2011

Используйте

execute(HttpUriRequest request, ResponseHandler<? extends T> responseHandler)

вместо

execute(HttpUriRequest request)

с пользовательским responseHandler.Таким образом, вы можете напрямую обрабатывать входной поток и делать с ним все, что захотите.Полагаю, использование EntityUtils неэффективно для GC.Если вам небезразличны такие вещи.

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

Используйте метод EntityUtils.toByteArray() вместо:

byte[] responseValueArray = EntityUtils.toByteArray(response.getEntity());

И чтобы получить первые 5 бит массива, используйте Arrays.copyOf() метод:

byte[] fiveLengthArray = Arrays.copyOf(responseValueArray, 5);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...