1. 第一步:权限和依赖
     <uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  1. **上传头像的接口传参 POST类型 SmallServer 接口 **
  //上传头像@Multipart@POST(MyApi.SHANGCHUANTOUXIANG_URL)Observable<ShangChuanTouxiangBean> getShangChuan(@Part MultipartBody.Part file);
  1. 网络工具类调用(上)Base拼接

public class RetrofitHttp {SmallServer smallServer;//无参构造private RetrofitHttp(){HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new HouTou())       //头参拦截器.addInterceptor(loggingInterceptor) //日志拦截器.build();Retrofit retrofit = new Retrofit.Builder().client(client).baseUrl(MyApi.BASE_URL)    //Base.addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJava2CallAdapterFactory.create()).build();smallServer = retrofit.create(SmallServer.class);}//静态类单例private static final class Retr{static RetrofitHttp retrofitHttp = new RetrofitHttp();}public static RetrofitHttp getInstance(){return Retr.retrofitHttp;}
}//上传头像public void getShan(File image, Observer<ShangChuanTouxiangBean> observer){RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), image);MultipartBody.Part filePart=MultipartBody.Part.createFormData("image",image.getName(),requestFile);smallServer.getShangChuan(filePart).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(observer);}
4. XML布局
     <ImageViewandroid:id="@+id/tou1"android:layout_width="40dp"android:layout_height="50dp"android:src="@mipmap/touxiang"android:layout_marginRight="20dp"></ImageView>

5. MainActivity类

 @BindView(R.id.tou1)ImageView  tou1;
     //点击头像更换头像tou1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//对话弹框AlertDialog.Builder builder = new AlertDialog.Builder(GeRenActivity.this);//对话弹框加载布局AlertDialog alertDialog = builder.setView(R.layout.popuwind).create();//对话框的显示alertDialog.show();WindowManager.LayoutParams params = alertDialog.getWindow().getAttributes();//获取屏幕的宽高Point point = new Point();Display display = GeRenActivity.this.getWindowManager().getDefaultDisplay();display.getSize(point);//使设置生效alertDialog.getWindow().setAttributes(params);//拍照alertDialog.getWindow().findViewById(R.id.paizhao).setOnClickListener(new View.OnClickLis tener() {@Overridepublic void onClick(View v) {startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE),520);alertDialog.dismiss();}});//相册alertDialog.getWindow().findViewById(R.id.xiangce).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(Intent.ACTION_PICK);intent.setType("image/*");startActivityForResult(intent, 2);alertDialog.dismiss();}});//取消alertDialog.getWindow().findViewById(R.id.quxiao).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {alertDialog.dismiss();}});}});
  1. AlertDialog的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/jishi"android:layout_margin="20dp"android:padding="10dp"><TextViewandroid:id="@+id/paizhao"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="拍照"android:textSize="20sp"android:gravity="center"android:textColor="#FFD600"></TextView><TextViewandroid:id="@+id/xiangce"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="相册"android:layout_marginTop="10dp"android:textSize="20sp"android:gravity="center"android:textColor="#D50000"></TextView><TextViewandroid:id="@+id/quxiao"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="取消"android:layout_marginTop="10dp"android:textSize="20sp"android:gravity="center"android:textColor="#00C853"></TextView></LinearLayout>

7. 相机照片和相册照片的回调

*上传的头像是File类型     获取到uri先转成bitmap 通过getFile上传成功  通过uri直接转成File上传不成功我是试了又试现在终于成功*
 @Overrideprotected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {super.onActivityResult(requestCode, resultCode, data);//相册Uri uri = data.getData();if (uri != null) {try {InputStream inputStream = getContentResolver().openInputStream(uri);Bitmap bitmap = BitmapFactory.decodeStream(inputStream);File file = getFile(bitmap);aPresenter.ShowChuanPresenter(file);} catch (FileNotFoundException e) {e.printStackTrace();}}//相机拍照if (requestCode==520){Bundle bundle = data.getExtras();Bitmap bitmap = (Bitmap)bundle.get("data");File file = getFile(bitmap);aPresenter.ShowChuanPresenter(file);}}private File getFile(Bitmap bitmap) {String defaultPath = getApplicationContext().getFilesDir().getAbsolutePath() + "/defaultGoodInfo";File file = new File(defaultPath);if (!file.exists()) {file.mkdirs();}String defaultImgPath = defaultPath + "/messageImg.jpg";file = new File(defaultImgPath);try {file.createNewFile();FileOutputStream fOut = new FileOutputStream(file);bitmap.compress(Bitmap.CompressFormat.PNG, 20, fOut);fOut.flush();fOut.close();} catch (Exception e) {e.printStackTrace();}return file;}

Android 头像上传相关推荐

  1. Android头像上传实战模拟

    Android头像上传实战模拟 在开发中头像的上传应该是必不可少的,话不多说上效果图! 点击头像弹出PopupWindow分别三个按钮. <?xml version="1.0" ...

  2. Android 头像上传的实现

    当我们点击头像想要进行头像上传时,我们可以给上传头像设置一个弹框效果,用来给用户提供相册选择和拍照两种选择. 这时我们可以使用PopupWindow实现 1. 定义图片存储位置 public void ...

  3. Android 头像上传

    内容概要 实例演示和原理讲解 从摄像头中获取图像 从图库中获取图像 在Android上对图像进行裁剪 图像上传并在服务器保存图像 实例演示和原理讲解 头像上传流程 从摄像头中获取图像 本课时的主要内容 ...

  4. Android头像上传--图片转base64,后台接收到的总是null问题

    图片转base64,后台接到为null问题 项目中,在使用头像上传的时候,将图片转为base64,后台总是收到的base64字符串是null.原以为是图片未压缩,导致图片过大,超过了Tomcat配置的 ...

  5. Android头像上传时裁剪图片过大问题,裁剪大图片导致

    原先在完成头像上传功能的时候复制网上写好的代码,虽然也仔细研究过实现的过程但是这次项目中却遇到了一个很不解的问题,使用乐视手机实现图片裁剪的那一步骤中由于图片太大手机性能不够导致图片无法裁剪报出错误 ...

  6. 调用android的拍照或本地相册选取再实现相片上传服务器,Android调用系统相机、本地相册上传图片(头像上传(裁剪)、多张图片上传)...

    开发中基本上都会有头像上传的功能,有的app还需要多张图片同时上传,下面简单将头像上传以及多张图片上传功能整理一下.图片选择仿照微信选择图片的界面.[参考] 多图片选择器 !!!推荐一个动态权限请求的 ...

  7. Android kotlin上传头像实现

    Android 上传头像基本上是每个app都有的功能,虽然看起来简单,但是作为新手的我实现起来却没有那么简单,实现如下 从相册获取照片,代码如下 //从相册获取照片private fun getFro ...

  8. android自定义头像上传,android裁切图片之用于头像上传

    嘛话都不说,直接贴代码,也是在网上找的代码copy出来的! 页面代码 encoding="utf-8"?> android:orientation="vertica ...

  9. android 华为裁剪全图,华为手机头像上传裁剪操作 报错

    华为手机头像上传操作, 裁剪点存储--进入裁剪后--点确定, 就直接报错退出程序了,其他机型测都是成功的,求大神指教 报错代码 @Override protected void onActivityR ...

最新文章

  1. python预处理删除特殊字符_python - 如何删除包含特殊字符的字符串?_others_酷徒编程知识库...
  2. 计算机视觉和模式识别领域SCI期刊介绍
  3. 关于Linux的缓存内存 Cache Memory详解
  4. php数据访问(查询)
  5. 蓝牙驱动卸载后自动安装_Intel 蓝牙驱动安装教程
  6. .Net培训个人总结笔记26
  7. [leetcode]Palindrome Number @ Python
  8. 算法导论--最小生成树(Kruskal和Prim算法)
  9. echarts r 地图_使用echarts实现省市区地图
  10. 前端实现下载文件-js实现a标签下载
  11. 1M到底是等于多少K?
  12. Pytorch创建多任务学习模型
  13. 如何用 Node.js 实现一个简单的 Websocket 服务?
  14. 图片资源类型转换为bitmap
  15. 获取SVG文件中use标签xlink:href的值
  16. 算法设计与分析第四章作业
  17. Java基础篇——面向对象编程
  18. 英文歌曲:What I Have Done(变形金刚第一部主题曲)
  19. 最优化方法——0.618法matlab实现
  20. 国瀚实业|工薪家庭理财资产配置攻略

热门文章

  1. GCN与GAT之间的重要联系和区别
  2. 鸡和兔子若干只,头有35个,脚有94个,求兔子和鸭个多少只
  3. RHEL iSCSI
  4. 深度学习利器之自动微分(2)
  5. lotus interop.5.5
  6. 如何在线赚钱:28 种真正的在线赚钱方式
  7. 小游戏内测激励视频广告,然而小程序最大的潜力是电商
  8. 【C语言】两个整数最大公约数和最小公倍数
  9. 如何让实景三维倾斜摄影机载LiDAR三维激光扫描车点云数据顺畅服务于高速公路市政道路BIM改扩建正向三维可视化设计?高效建立精准地表三维模型DEM,让勘测与设计专业更直接地完成三维设计工作。
  10. 深度Linux安装火狐,Firefox