الروبوت جافا-تحويل نتيجة هتبوست إلى بايت []
-
27-10-2019 - |
سؤال
أحاول الحصول على 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)
مع ريسبونسهاندلر مخصص.وبهذه الطريقة يمكنك التعامل مع تيار المدخلات مباشرة وتفعل أي شيء تريده معها.استخدام إنتيتيوتيلز هو غ غير كافية أفترض.إذا كنت تهتم بهذا النوع من الأشياء.