package com.lzy.demo.okgo; import android.content.Intent; import android.os.Bundle; import android.text.format.Formatter; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import com.lzy.demo.R; import com.lzy.demo.base.BaseDetailActivity; import com.lzy.demo.callback.JsonCallback; import com.lzy.demo.model.LzyResponse; import com.lzy.demo.model.ServerModel; import com.lzy.demo.ui.NumberProgressBar; import com.lzy.demo.utils.GlideImageLoader; import com.lzy.demo.utils.Urls; import com.lzy.imagepicker.ImagePicker; import com.lzy.imagepicker.bean.ImageItem; import com.lzy.imagepicker.ui.ImageGridActivity; import com.lzy.okgo.OkGo; import com.lzy.okgo.request.BaseRequest; import java.io.File; import java.util.ArrayList; import butterknife.Bind; import butterknife.ButterKnife; import butterknife.OnClick; import okhttp3.Call; import okhttp3.Response; public class FormUploadActivity extends BaseDetailActivity { @Bind(R.id.formUpload) Button btnFormUpload; @Bind(R.id.downloadSize) TextView tvDownloadSize; @Bind(R.id.tvProgress) TextView tvProgress; @Bind(R.id.netSpeed) TextView tvNetSpeed; @Bind(R.id.pbProgress) NumberProgressBar pbProgress; @Bind(R.id.images) TextView tvImages; private ArrayList<ImageItem> imageItems; @Override protected void onActivityCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_form_upload); ButterKnife.bind(this); setTitle("文件上传"); } @Override protected void onDestroy() { super.onDestroy(); //Activity销毁时,取消网络请求 OkGo.getInstance().cancelTag(this); } @OnClick(R.id.selectImage) public void selectImage(View view) { ImagePicker imagePicker = ImagePicker.getInstance(); imagePicker.setImageLoader(new GlideImageLoader()); imagePicker.setMultiMode(true); //多选 imagePicker.setShowCamera(true); //显示拍照按钮 imagePicker.setSelectLimit(9); //最多选择9张 imagePicker.setCrop(false); //不进行裁剪 Intent intent = new Intent(this, ImageGridActivity.class); startActivityForResult(intent, 100); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == ImagePicker.RESULT_CODE_ITEMS) { if (data != null && requestCode == 100) { imageItems = (ArrayList<ImageItem>) data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS); if (imageItems != null && imageItems.size() > 0) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < imageItems.size(); i++) { if (i == imageItems.size() - 1) sb.append("图片").append(i + 1).append(" : ").append(imageItems.get(i).path); else sb.append("图片").append(i + 1).append(" : ").append(imageItems.get(i).path).append("\n"); } tvImages.setText(sb.toString()); } else { tvImages.setText("--"); } } else { Toast.makeText(this, "没有选择图片", Toast.LENGTH_SHORT).show(); tvImages.setText("--"); } } } @OnClick(R.id.formUpload) public void formUpload(View view) { ArrayList<File> files = new ArrayList<>(); if (imageItems != null && imageItems.size() > 0) { for (int i = 0; i < imageItems.size(); i++) { files.add(new File(imageItems.get(i).path)); } } //拼接参数 OkGo.post(Urls.URL_FORM_UPLOAD)// .tag(this)// .headers("header1", "headerValue1")// .headers("header2", "headerValue2")// .params("param1", "paramValue1")// .params("param2", "paramValue2")// // .params("file1",new File("文件路径")) //这种方式为一个key,对应一个文件 // .params("file2",new File("文件路径")) // .params("file3",new File("文件路径")) .addFileParams("file", files) // 这种方式为同一个key,上传多个文件 .execute(new JsonCallback<LzyResponse<ServerModel>>() { @Override public void onBefore(BaseRequest request) { super.onBefore(request); btnFormUpload.setText("正在上传中..."); } @Override public void onSuccess(LzyResponse<ServerModel> responseData, Call call, Response response) { handleResponse(responseData.data, call, response); btnFormUpload.setText("上传完成"); } @Override public void onError(Call call, Response response, Exception e) { super.onError(call, response, e); handleError(call, response); btnFormUpload.setText("上传出错"); } @Override public void upProgress(long currentSize, long totalSize, float progress, long networkSpeed) { System.out.println("upProgress -- " + totalSize + " " + currentSize + " " + progress + " " + networkSpeed); String downloadLength = Formatter.formatFileSize(getApplicationContext(), currentSize); String totalLength = Formatter.formatFileSize(getApplicationContext(), totalSize); tvDownloadSize.setText(downloadLength + "/" + totalLength); String netSpeed = Formatter.formatFileSize(getApplicationContext(), networkSpeed); tvNetSpeed.setText(netSpeed + "/S"); tvProgress.setText((Math.round(progress * 10000) * 1.0f / 100) + "%"); pbProgress.setMax(100); pbProgress.setProgress((int) (progress * 100)); } }); } }