Hi các bạn trước khi bắt đầu bài viết các bạn chưa xem các bài viết trước có thể quay lại xem để hiểu hơn:
Trước khi băt đầu bài viết để hiểu hơn về retrofit các bạn xem trước các bài viết này: Tìm Hiểu về Retrofit
Tìm Hiểu về Retrofit
Sử dụng retrofit getdata
Sử dụng retrofit post data
Ở bài viết này mình sẽ hướng dẫn các bạn cách upload một image lên server sử dụng thư viện retrofit 2 theo cách mà mình hay làm.
Lưu ý đây không phải cách dựa trên document của Retrofit 2
Cấu trúc project:
Các thư viên hỗ trợ:
Sử dụng thư viện ButterKnife
compile 'com.squareup.retrofit2:retrofit:2.0.2' compile 'com.squareup.retrofit2:converter-gson:2.0.2' compile 'com.jakewharton:butterknife:8.4.0' apt 'com.jakewharton:butterknife-compiler:8.4.0' compile 'com.github.bumptech.glide:glide:3.7.0'
- Tạo bảng
CREATE TABLE `imageupload`[ `id` INT PRIMARY KEY AUTO_INCREMENT, `url` VARCHAR[50] NOT NULL, UNIQUE [id] ];
2. Viết trang PHP như sau
4. Bắt đầu code
- Viết API
public interface APIUpload { @FormUrlEncoded @POST["upload-image.php"] Call uploadImage[@Field["imageCode"]String imgCode, @Field["imageName"]String imgName]; }
- Viết model nhận thông tin trả về
public class Message implements Serializable{ @SerializedName["message"] private String message; //contructor //getter/ setter }
- MainActivity
Viết hàm checkpermistion cho android 6.0
//Check permistion android 6.0 private void checkPermistion[] { if [ContextCompat.checkSelfPermission[MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE] != PackageManager.PERMISSION_GRANTED] { if [ActivityCompat.shouldShowRequestPermissionRationale[MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE]] { } else { ActivityCompat.requestPermissions[MainActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1]; } } }
- Lấy ảnh trong thư viện sử dụng Intent
@OnClick[R.id.buttonChoose] public void chooseImage[]{ checkPermistion[]; Intent intent = new Intent[Intent.ACTION_GET_CONTENT]; intent.setType["image/*"]; startActivityForResult[intent, 0]; }
- Nhận data, load ảnh lên imageView
@Override public void onActivityResult[int requestCode, int resultCode, Intent data] { super.onActivityResult[requestCode, resultCode, data]; if [requestCode == 0 && resultCode == MainActivity.this.RESULT_OK] { PATH = RealPathUtil.getPath[MainActivity.this, data.getData[]]; Uri uri = Uri.fromFile[new File[PATH]]; // Get name imgName = PATH.substring[PATH.lastIndexOf["/"]+1]; Toast.makeText[MainActivity.this, imgName, Toast.LENGTH_LONG].show[]; try { //Get BitMap bitmap = MediaStore.Images.Media.getBitmap[getContentResolver[], uri]; } catch [IOException e] { e.printStackTrace[]; } // Load image Glide.with[MainActivity.this].load[uri].override[420, 594].centerCrop[].into[imageView]; Toast.makeText[this, PATH, Toast.LENGTH_LONG].show[]; } }
- Encode bitmap toString để upload lên server
// Encode bitmap to String public String getBitMap[Bitmap bmp]{ ByteArrayOutputStream baos = new ByteArrayOutputStream[]; bmp.compress[Bitmap.CompressFormat.JPEG, 50, baos]; byte[] imageBytes = baos.toByteArray[]; String encodedImage = Base64.encodeToString[imageBytes, Base64.DEFAULT]; return encodedImage; }
- Hàm upload như sau
CREATE TABLE `imageupload`[ `id` INT PRIMARY KEY AUTO_INCREMENT, `url` VARCHAR[50] NOT NULL, UNIQUE [id] ];0
- Lớp Util xử dụng để get path của hình ảnh []
CREATE TABLE `imageupload`[ `id` INT PRIMARY KEY AUTO_INCREMENT, `url` VARCHAR[50] NOT NULL, UNIQUE [id] ];1
Kết quả:
Check link tại đây: //dev.androidcoban.com/blog/upload/
Vậy là xong tiến hành chạy và kiểm tra kết quả! Chúc các bạn thành công!