Android图片打开上传

打开相册

大多的安卓程序都需要上传头像或者一些图片,给大家一些我这几天遇到图片上传问题的经验。
首先这是我的个人中心页面

点击上面的图片,会出现我们相册的选项,点击进入以后可以选择图片。

 @Overridepublic void onActivityCreated(@Nullable Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);uName = (TextView) getActivity().findViewById(R.id.uName);userInner = (UserInner) getActivity().getIntent().getSerializableExtra("userInner");uName.setText(userInner.getName());draweeView = (SimpleDraweeView) getActivity().findViewById(R.id.photo);if(userInner.getPhoto()!=null){Uri uri = Uri.parse(userInner.getPhoto());draweeView.setImageURI(uri);}draweeView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);startActivityForResult(i,GETIMG);}});list = (ListView) getActivity().findViewById(R.id.list);cancel = (Button) getActivity().findViewById(R.id.cancel) ;cancel.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent = new Intent(getActivity(),MainActivity.class);startActivity(intent);}});list.setAdapter(new ItemAdapter(getActivity(),Arrays.asList(items)));}@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {switch (requestCode){case TAKEPHOTO:if(resultCode ==RESULT_OK){draweeView.setImageURI(imageUri);}break;case GETIMG://打开相册并选择照片,这个方式选择单张
// 获取返回的数据,这里是android自定义的Uri地址Uri selectedImage = data.getData();String[] filePathColumn = { MediaStore.Images.Media.DATA };
// 获取选择照片的数据视图if(selectedImage!=null){Cursor cursor = getActivity().getContentResolver().query(selectedImage, filePathColumn, null, null, null);cursor.moveToFirst();
// 从数据视图中获取已选择图片的路径int columnIndex = cursor.getColumnIndex(filePathColumn[0]);picturePath = cursor.getString(columnIndex);cursor.close();
// 将图片显示到界面上NetworkUtil.upLoadImg("http://39.106.81.100:9999/firefly/user/upload",userInner.getId().toString(),picturePath, BasMsg.class, new INetCallback<BasMsg>() {@Overridepublic void onSuccess(final BasMsg msg) {draweeView.setImageURI(picturePath);}});}break;default:break;}}

上面关于fesco图片框架的问题,大家可以去官网看一下Fesco官网
Android必用的图片加载框架,还可以设置圆角,形状等。

上传至服务器

那么我们引入okHttp3—火爆的网络库以后,就可以写好get,post等方法进行上传数据和文件了。

GET

static OkHttpClient client  = new OkHttpClient();static Gson gson = new Gson();public static <T> void getMethod(String url,final Class<T> cls,final INetCallback<T> callback){final Request request = new Request.Builder().url(url).build();client.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {}@Overridepublic void onResponse(Call call, Response response) throws IOException {if(response.isSuccessful()){//回调的方法执行在子线程。callback.onSuccess(gson.fromJson( response.body().string(),cls));}}});}

POST

public static void postMethod(String url, HashMap<String,String> map, final Class cls, final INetCallback callback){
FormBody.Builder formBody = new FormBody.Builder();//创建表单请求体
for (String key:map.keySet())
{
formBody.add(key,map.get(key));
}
Request request = new Request.Builder()//创建Request 对象。
.url(url)
.post(formBody.build())//传递请求体
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {

            Log.d("Network","failure");}@Overridepublic void onResponse(Call call, Response response) throws IOException {if(response.isSuccessful()){callback.onSuccess(gson.fromJson(response.body().string(),cls));}}});
}

POST上传图片(MultipartFile)

public static <T> void upLoadImg(String url, String uid ,String imgPath, final Class<T> cls, final INetCallback<T> callback){final String imageType = "multipart/form-data";File file = new File(imgPath);RequestBody fileBody = RequestBody.create(MediaType.parse("image/*"), file);RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("img",file.getName(),fileBody).addFormDataPart("uid", uid).build();Request request = new Request.Builder().url(url).post(requestBody).build();client.newBuilder().readTimeout(10000, TimeUnit.MILLISECONDS).build().newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {e.printStackTrace();Log.d("Timeout","超时超时");}@Overridepublic void onResponse(Call call, Response response) throws IOException {if(response.isSuccessful()){callback.onSuccess(gson.fromJson(response.body().string(),cls));}}});}

Android打开相册并上传图片至服务器相关推荐

  1. android上传本地图片到服务器上,Android使用post方式上传图片到服务器的方法

    本文实例讲述了Android使用post方式上传图片到服务器的方法.分享给大家供大家参考,具体如下: /** * 上传文件到服务器类 * * @author tom */ public class U ...

  2. android用上传图片到服务器上,Android使用post方式上传图片到服务器的方法

    本文实例讲述了Android使用post方式上传图片到服务器的方法.分享给大家供大家参考,具体如下: /** * 上传文件到服务器类 * * @author tom */ public class U ...

  3. Android打开相册vs拍照获取图片的原理实现

    前言:这几天在做用户登陆注册的逻辑时,遇到了要修改用户的头像问题的解决.在此把实现的原理以及实现过程中遇到的问题分享个大家...留下些许脚印 在手机的app里我们常常可用看到在个人中心页面有修改头像的 ...

  4. android跳转到相册需要权限,Android打开相册获取图片路径

    一.获得图片路径 当我们通过Intent打开相册,获取图片后,在onActivityResult回调中会得到图片的Uri. 但是Uri无法直接获得图片的路径.如果你曾经直接操作过android里的数据 ...

  5. Android打开相册和摄像头

    在xml布局文件中布局 <ImageView android:id="@+id/ivHead"android:layout_marginTop="20dp" ...

  6. Unity Android 打开相册和摄像头

    需求:要实现打开手机的相册和摄像头,选择照片或者拍照后,在unity进行. 1.android插件 我使用的是AndroidStuido来写插件,下面是一步步介绍流程 (1)创建android工程 注 ...

  7. android打开相册功能,Android 常用系统功能(打开相册,打开系统设置等等)

    1.开开相册: private void selectImg() { Intent pickIntent = new Intent(Intent.ACTION_PICK, MediaStore.Ima ...

  8. android 打开相册的权限,Android 启动系统相机,相册,裁剪图片及6.0权限管理

    在日常开发中,我们经常需要用到上传图片的 功能,这个时候通常有两种做法,第一种,从相机获取,第二种,从相册获取.今天这篇博客主要讲解利用系统的Intent怎样获取? 主要内容如下 怎样通过相机获取我们 ...

  9. Android 打开相册选择图片及相册图片返回路径获取

    今天写一个最简单获取相册照片的方法,然后根据返回的相册信息获取图片本地路径 1.布局文件仅有一个图片和一个button <ImageViewandroid:id="@+id/image ...

最新文章

  1. C语言切割多层字符串(strtok_r strtok使用方法)
  2. linux系统的安装程序,Linux系统安装
  3. Google Guava,牛逼的脚手架
  4. TCP/IP入门(1) --链路层
  5. 阿里云三代掌门人首次同台,共叙云计算十年风云路!
  6. SpringMVC源码阅读:定位Controller
  7. Ajax的工具类AjaxUtils,使用struts返回Json类型
  8. 百度OCR图片内容识别
  9. 假设有一个英文文本文件,编写程序读取其内容,并将其中的大写字母变为小写字母,小写字母变为大写字母。...
  10. javascript解决猴子偷桃问题
  11. 网易云课堂 计算机入门 期末 编程题
  12. ping 延迟 linux,使用ping命令查看网络延迟--用Enki学Linux系列(7)
  13. 非常详细易懂的法线贴图(Normal Mapping)
  14. linux设置共享文件夹和删除共享文件夹(vmware:linux-windows共享文件夹)
  15. GateData Graph Digitizrer 图片中原始曲线数据提取——科研利器
  16. 不显示藏宝阁试穿服务器,梦幻西游:真的感谢藏宝阁的试穿系统,圆了我拥有无级别的梦...
  17. 详解滤波电路工作原理及相关参数计算
  18. hyperMILL 2018三四五轴基础到高级编程视频教程
  19. 基于QQ或飞信形式的手机远程关闭电脑的工具
  20. HTML实现植物大战僵尸(游戏截图+动态演示+源码分享)

热门文章

  1. oppor9splus计算机找不到了,如果oppor9splus的返回键失败,该如何设置oppor9splus虚拟键?...
  2. ArcGIS栅格转面失败 所转面为空 显示原栅格范围有问题
  3. 汉字乱码状态下的编码转换将导致的问题
  4. tensorflow 报错 IndexError: pop from empty list
  5. 关于NodeJS版网易云API,获取歌词对象不完整问题的解决方案
  6. Java 多线程编程 实验题
  7. python属于高级编程语言_高级语言程序设计(Python)
  8. 在VMware16虚拟机中安装Windows10操作系统详细过程!!必看
  9. SQL 语句耗时查询
  10. 基于STM32的CAN转USB模块的PCB设计