Multipart/form-data با کتابخانه Volley (درست شد فعلا)
با سلام خدمت دوستان گرامی
این سوال رو جایی طرح کردم ولی کسی جوابی نداد. مجبور شدم یه تایپیک جدید براش ایجاد کنم. مطمئن هستم دوسانی هستن که بتنونن به من کمک کنن.
در قسمتی از برنامم میخوام ثبت نامی انجام بدم که همراه با عکس کاربر که از گالری انتخاب میکنه و اطلاعات رو بصورت data سمت سرور بفرستم.
یکی از دوستان volleyMultipartRequesr رو معرفی کردن و من هم از این لینک استفاده کردم که خیلی به اون چیزی که میخواستم نزدیک بود ولی برای دادن عکس به اون متد مشکل دارم و نمیدونم چطور باید عکسی که از گالری انتخاب میکنم رو بهش بدم. من تونستم بدون عکس ثبت نام کنم ولی خب به عکس هم نیاز دارم چکار بکنم که عکسی که از گالری میگیرم رو به متد getByteData بدم.
که کسی هست این رو برای من توضیح بده این خط ینی چی!
@Override
protected Map<String, DataPart> getByteData() {
Map<String, DataPart> params = new HashMap<>();
این خط پایین چطوری کار میکنه و چطور من عکسی که از گالری رو میگیرم بهش بدم؟
params.put("avatar", new DataPart("file_avatar.jpg", AppHelper.getFileDataFromDrawable(getBaseContext(), circleImageView.getDrawable()), "image/jpeg"));
return params;
}
و اینم کلاس AppHelper
public class AppHelper {
/**
* Turn drawable resource into byte array.
*
* @param context parent context
* @param id drawable resource id
* @return byte array
*/
public static byte[] getFileDataFromDrawable(Context context, int id) {
Drawable drawable = ContextCompat.getDrawable(context, id);
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 0, byteArrayOutputStream);
return byteArrayOutputStream.toByteArray();
}
/**
* Turn drawable into byte array.
*
* @param drawable data
* @return byte array
*/
public static byte[] getFileDataFromDrawable(Context context, Drawable drawable) {
Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 80, byteArrayOutputStream);
return byteArrayOutputStream.toByteArray();
}
}
اینم متد برای گرفتن عکس و ست کردن اون به imageView
private void showFileChooser() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.getDataString();
startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
Uri filePath = data.getData();
//Getting the Bitmap from Gallery
bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(),filePath );
//Setting the Bitmap to ImageView
circleImageView.setImageBitmap(getResizedBitmap(bitmap,512,512));
}
}
ممنون میشم راهنمایی کنید
سلام. اون خطی ک پرسیده بودی کارش اینه که بهش ادرس یک drawable میدی و برات به ارایه ای از Byte ها تبدیل میکنه. همین!
شما فقط باید تو متدی ک برای گرفتن عکس و ست کردن اون به imageView هست داخلش اون متد getFileDataFromDrawable صدا بزنی تا بهت ارایه بایت ها رو برگردونه و بعد هم تو متد
getByteData();
اون ارایه ارسال کنی ب سمت سرور
private void showFileChooser() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.getDataString();
startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
Uri filePath = data.getData();
//Getting the Bitmap from Gallery
bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(),filePath );
//Setting the Bitmap to ImageView
circleImageView.setImageBitmap(getResizedBitmap(bitmap,512,512));
AppHelper.getFileDataFromDrawable(context,circleImageView.getDrawable()); // به این شکل؟
}
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .