بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

Multipart/form-data با کتابخانه Volley (درست شد فعلا)

مدیریت گفتگو
mosafer 9 سال پیش
آخرین تغییر: 9 سال پیش

با سلام خدمت دوستان گرامی

این سوال رو جایی طرح کردم ولی کسی جوابی نداد. مجبور شدم یه تایپیک جدید براش ایجاد کنم. مطمئن هستم دوسانی هستن که بتنونن به من کمک کنن.

در قسمتی از برنامم میخوام ثبت نامی انجام بدم که همراه با عکس کاربر که از گالری انتخاب میکنه و اطلاعات رو بصورت 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));

}
}
 

ممنون میشم راهنمایی کنید

نظرات

پاسخ‌ها 2

Soheil 9 سال پیش

سلام. اون خطی ک پرسیده بودی کارش اینه که بهش ادرس یک drawable میدی و برات به ارایه ای از Byte ها تبدیل میکنه. همین!

شما فقط باید تو متدی ک  برای گرفتن عکس و ست کردن اون به imageView هست داخلش اون متد getFileDataFromDrawable   صدا بزنی تا بهت ارایه بایت ها رو برگردونه و بعد هم تو متد  

 getByteData();
اون ارایه ارسال کنی ب سمت سرور


نظرات

mosafer 9 سال پیش
ممنون از جوابتون. پایین گذاشتم ببینید درسته
mosafer 9 سال پیش

 

 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()); // به این شکل؟

}
}

 

نظرات

mosafer 9 سال پیش
آقا سهیل درست انجام دادم؟!
mosafer 9 سال پیش
آقا ممنون درست کار کرد.
Soheil 9 سال پیش
خواهش میکنم . بله کاملا درسته. لطفا ب عنوان پاسخ صحیح مشخص کنید ک دیگر دوستان بتونند استفاده کنند. مچکرم
mosafer 9 سال پیش
آیا میشه از این کلاسها برای دانلود فایل هم استفاده کرد؟
امید 9 سال پیش
اینو سمت سرور چجوری بگیریم ؟

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .