سؤال

أحاول الحصول على 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);
                }

            }
        });
    }
}

ونتيجة لهذا هتبوست أنا الحصول على سلسلة التي أحتاج إلى تحويل إلى بايت كما فعلت والحصول على بايت محددة منه..ترغب في البدء من 15 عنصرا إلى 25 أو شيء من هذا القبيل.أي اقتراحات كيف يمكنني أن أفعل ذلك?

شكرا مقدما على جميع الاقتراحات والمساعدة.

هل كانت مفيدة؟

المحلول

استخراج سوباراي من صفيف يتم مع أرايكوبي 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);

نصائح أخرى

استخدام EntityUtils.toByteArray() الطريقة بدلا من ذلك:

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

وللحصول على أول 5 بت من الصفيف ، استخدم Arrays.copyOf() الطريقة:

byte[] fiveLengthArray = Arrays.copyOf(responseValueArray, 5);

استخدام

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

بدلا من

execute(HttpUriRequest request)

مع ريسبونسهاندلر مخصص.وبهذه الطريقة يمكنك التعامل مع تيار المدخلات مباشرة وتفعل أي شيء تريده معها.استخدام إنتيتيوتيلز هو غ غير كافية أفترض.إذا كنت تهتم بهذا النوع من الأشياء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top