آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

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

mosafer  6 سال پیش  6 سال پیش
0 0

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

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

در قسمتی از برنامم میخوام ثبت نامی انجام بدم که همراه با عکس کاربر که از گالری انتخاب میکنه و اطلاعات رو بصورت 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  6 سال پیش
+1 0

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

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

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


0 0
ممنون از جوابتون. پایین گذاشتم ببینید درسته (6 سال پیش)
پاسخ به سوال 
mosafer  6 سال پیش
0 0

 

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

}
}

 

0 0
آقا سهیل درست انجام دادم؟! (6 سال پیش)
0 0
آقا ممنون درست کار کرد. (6 سال پیش)
+1 0
خواهش میکنم . بله کاملا درسته. لطفا ب عنوان پاسخ صحیح مشخص کنید ک دیگر دوستان بتونند استفاده کنند. مچکرم (6 سال پیش)
0 0
آیا میشه از این کلاسها برای دانلود فایل هم استفاده کرد؟ (6 سال پیش)
0 0
اینو سمت سرور چجوری بگیریم ؟ (6 سال پیش)

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