第一步:
相关权限;
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
创建一个类Api:
public class Api { public static final String banner="https://www.zhaoapi.cn/ad/getAd"; public static final String syfenlei="https://www.zhaoapi.cn/product/getCatagory"; public static final String ctouxiang="https://www.zhaoapi.cn/file/upload"; }
mainActivity
private static final int CHOOSE_PICTURE = 0; private static final int TAKE_PICTURE = 1; private static final int CROP_SMALL_PICTURE = 2; private static Uri tempUri;
final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle("设置头像"); String[] items={"选择本地照片","拍照"}; builder.setNegativeButton("取消",null); builder.setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { switch (which){ case CHOOSE_PICTURE: Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*"); startActivityForResult(intent,CHOOSE_PICTURE); break; case TAKE_PICTURE: Intent intent1=new Intent(MediaStore.ACTION_IMAGE_CAPTURE); tempUri=Uri.fromFile(new File(Environment.getExternalStorageDirectory(),"image.jpg")); intent1.putExtra(MediaStore.EXTRA_OUTPUT,tempUri); startActivityForResult(intent1,TAKE_PICTURE); break; } } }); builder.create().show();
// 上传头像 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode){ case TAKE_PICTURE: startPhotoZoom(tempUri); break; case CHOOSE_PICTURE: startPhotoZoom(data.getData()); break; case CROP_SMALL_PICTURE: if(data!=null){ setImageToView(data); } break; } } private void startPhotoZoom(Uri uri) { if(uri==null){ Log.i("tag","The uri is not exist"); } tempUri=uri; Intent in=new Intent("com.android.camera.action.CROP"); in.setDataAndType(uri,"image/*"); //设置裁剪 in.putExtra("crop","true"); in.putExtra("aspectX",1); in.putExtra("aspectY",1); //宽高 in.putExtra("outputX",150); in.putExtra("outputY",150); in.putExtra("return-data",true); startActivityForResult(in,CROP_SMALL_PICTURE); } private void setImageToView(Intent data) { Bundle extras=data.getExtras(); if(extras!=null){ Bitmap photo=extras.getParcelable("data"); touxiang.setImageBitmap(photo); saveImage(photo); File file=new File(getActivity().getCacheDir()+"/aa.jpg"); OkHttpClient ck=new OkHttpClient(); MultipartBody.Builder builder=new MultipartBody.Builder().setType(MultipartBody.FORM); builder.addFormDataPart("file",file.getName(), RequestBody.create(MediaType.parse("image/*"),file)); Request request=new Request.Builder().url(Api.ctouxiang).post(builder.build()).build(); ck.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Toast.makeText(getActivity(), "上传头像失败", Toast.LENGTH_SHORT).show(); } @Override public void onResponse(Call call, Response response) throws IOException { try { JSONObject json=new JSONObject(response.body().string()); final String msg = json.optString("msg"); getActivity().runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getActivity(), "上传头像成功", Toast.LENGTH_SHORT).show(); } }); } catch (Exception e) { e.printStackTrace(); } } }); } } private void saveImage(Bitmap photo) { File file=new File(getActivity().getCacheDir()+"/aa.jpg"); try { BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(file)); photo.compress(Bitmap.CompressFormat.JPEG,100,bos); bos.flush(); bos.close(); } catch (Exception e) { e.printStackTrace(); } }