相册,照相,附带上传下载

来源:互联网 发布:淘宝专柜正品是真的吗 编辑:程序博客网 时间:2024/04/29 03:10

一步一步来:

AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle("设置头像");String[] items = { "选择本地照片", "拍照" };builder.setNegativeButton("取消", null);builder.setItems(items, new DialogInterface.OnClickListener() {    @Override    public void onClick(DialogInterface dialog, int which) {        switch (which) {            case 0: // 选择本地照片                Intent intent1 = new Intent(Intent.ACTION_PICK);                intent1.setType("image/*");   //不截图时,加上intent.putExtra("return-data", true);                startActivityForResult(intent1, 101);                break;            case 1: // 拍照                // 这个出捕获图片的常量值                Intent intent2 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);                // 设置图片输出位置; 输出到制定的uri路径上;                intent2.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(sdcardPath+fileName)));                // 设置请求码                startActivityForResult(intent2, 100);                break;        }    }});builder.create().show();
回调方法:

@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {    super.onActivityResult(requestCode, resultCode, data);    if (requestCode == 100 && resultCode == RESULT_OK) {   //拍照        Uri uri = Uri.fromFile(new File(sdcardPath + fileName));        startPhotoZoom(uri);    } else if (requestCode == 101 && resultCode == RESULT_OK) {   //相册        // 获取data中的数据        Uri data2 = data.getData();        startPhotoZoom(data2);//不截图时,直接调用下两行的获取bitmap方式,再转为String,就好了,上传    } else if (requestCode == 102 && resultCode == RESULT_OK) {        //这个参数data,是固定写法        Bitmap bitmap = data.getParcelableExtra("data");        //转为String        String s = savePhoto(bitmap, Environment.getExternalStorageDirectory().getAbsolutePath(), String.valueOf(System.currentTimeMillis()));        //final String path = data.getData().getPath();        Map<String,Object> mapfile = new HashMap<>();   //这里用了网络请求,上传头像到服务器        mapfile.put("source","android");        mapfile.put("uid","3063");        mapfile.put("file",new File(s));        OKHttpFileUtil.getInstence().upFile(mapfile, new Callback() {            @Override            public void onFailure(Call call, IOException e) {                handler.post(new Runnable() {                    @Override                    public void run() {                        Log.e("MyDetail","上传失败");                    }                });            }            @Override            public void onResponse(Call call, Response response) throws IOException {                handler.post(new Runnable() {                    @Override                    public void run() {                        Log.e("MyDetail","上传成功");                        rp.postt(path, map, MyBean.class);                    }                });            }        });    }}
网络请求:

package com.example.jingdong.NewMVP.Utils;import com.example.jingdong.HttpUtils.OKHttpUtil;import java.io.File;import java.util.Map;import java.util.concurrent.TimeUnit;import okhttp3.Call;import okhttp3.Callback;import okhttp3.MediaType;import okhttp3.MultipartBody;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.RequestBody;/** * Created by Administrator on 2017/12/25 0025. */public class OKHttpFileUtil {    public final static String BASE_URL = "http://120.27.23.105/";    public final static String UPLOAD_FILE_ACTION = "file/upload";    public OkHttpClient okHttpClient;    public static volatile OKHttpFileUtil okHttpFileUtil;    public OKHttpFileUtil(){    }    public static OKHttpFileUtil getInstence(){        if(null==okHttpFileUtil){            synchronized (OKHttpUtil.class){                if(okHttpFileUtil==null){                    okHttpFileUtil = new OKHttpFileUtil();                }            }        }        return okHttpFileUtil;    }    public OkHttpClient getOKHttpCilent(){        okHttpClient = new OkHttpClient.Builder()                .readTimeout(10*1000, TimeUnit.SECONDS)                .writeTimeout(10*1000,TimeUnit.SECONDS)                .connectTimeout(10*1000,TimeUnit.SECONDS).build();        return okHttpClient;    }    public void upFile(Map<String,Object> map, Callback callback){        String url = String.format("%s%s",BASE_URL,UPLOAD_FILE_ACTION);        MultipartBody.Builder multiparbody = new MultipartBody.Builder();        multiparbody.setType(MultipartBody.FORM);        for(String key : map.keySet()){            Object o = map.get(key);            if(o instanceof String){                multiparbody.addFormDataPart(key,o.toString());            }else if(o instanceof File){                File file = (File) o;                multiparbody.addFormDataPart(key,file.getName(),MultipartBody.create(MediaType.parse("multipart/form-data"),file));            }        }        RequestBody requestBody = multiparbody.build();        Request request = new Request.Builder()                .url(url)                .post(requestBody)                .build();        Call call = getOKHttpCilent().newCall(request);        call.enqueue(callback);    }    public void downFile(Callback callback){        Request request = new Request.Builder()                .url("http://g.hiphotos.baidu.com/image/pic/item/908fa0ec08fa513d08b6a0ab376d55fbb2fbd9a3.jpg")                .get()                .build();        getOKHttpCilent().newBuilder().build().newCall(request).enqueue(callback);    }}
/** * 裁剪图片方法实现 * */protected void startPhotoZoom(Uri uri) {    if (uri == null) {        Log.e("tag", "The uri is not exist.");    }    Log.e("tag", uri.toString()+"");    Intent intent = new Intent("com.android.camera.action.CROP");    intent.setDataAndType(uri, "image/*");    // 设置裁剪    intent.putExtra("crop", "true");    // aspectX aspectY 是宽高的比例    intent.putExtra("aspectX", 1);    intent.putExtra("aspectY", 1);    // outputX outputY 是裁剪图片宽高    intent.putExtra("outputX", 150);    intent.putExtra("outputY", 150);    //intent.putExtra("outputFormat", "JPEG");// 图片格式    intent.putExtra("noFaceDetection", false);// 取消人脸识别    intent.putExtra("return-data", true);      //不截图时,intent加参数piuExtru加这行代码,直接获取bitmap对象    startActivityForResult(intent, 102);}
bitmap转为String方法:

public String savePhoto(Bitmap photoBitmap, String path,                               String photoName) {    String localPath = null;    if (android.os.Environment.getExternalStorageState().equals(            android.os.Environment.MEDIA_MOUNTED)) {        File dir = new File(path);        if (!dir.exists()) {            dir.mkdirs();        }        File photoFile = new File(path, photoName + ".jpg");        FileOutputStream fileOutputStream = null;        try {            fileOutputStream = new FileOutputStream(photoFile);            if (photoBitmap != null) {                if (photoBitmap.compress(Bitmap.CompressFormat.PNG, 100,                        fileOutputStream)) { // 转换完成                    localPath = photoFile.getPath();                    fileOutputStream.flush();                }            }        } catch (FileNotFoundException e) {            photoFile.delete();            localPath = null;            e.printStackTrace();        } catch (IOException e) {            photoFile.delete();            localPath = null;            e.printStackTrace();        } finally {            try {                if (fileOutputStream != null) {                    fileOutputStream.close();                    fileOutputStream = null;                }            } catch (IOException e) {                e.printStackTrace();            }        }    }    return localPath;}

在这里加个下载,在上边的OKHttpUtil中有个方法是下载图片,下载方法中的call的回调方法中加入如下代码:

@Overridepublic void onResponse(Call call, Response response) throws IOException {    if (response.isSuccessful()) {        String fileName = "/11111.jpg";        String sdcardPath = Environment.getExternalStorageDirectory().getPath();        final File file = new File(sdcardPath + fileName);        InputStream inputStream = response.body().byteStream();        FileOutputStream outputStream = new FileOutputStream(file);        byte[] buffer = new byte[2048];        int len = 0;        while ((len = inputStream.read(buffer)) != -1){            outputStream.write(buffer,0,len);        }        outputStream.flush();        outputStream.close();        inputStream.close();        handler.post(new Runnable() {            @Override            public void run() {                presenter.success(file.getPath());            }        });    }}


阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 百年虚云一台戏 南怀瑾 虚云老和尚 百年虚云高清下载 虚云老和尚楞严经 百年虚云老和尚 百年虚云下载 虚云仙踪录 阿丝达黛 虚云老和尚语录 百年虚云20集 虚云老和尚的足迹 虚云老和尚祈雪 百年虚云全集下载 百年虚云主题曲 虚云老和尚的神通 虚云老和尚照片 虚伪 虚伪意思 虚伪图片 虚伪的图片 虚伪英文 虚伪的人 虚伪的英文 华丽的虚伪 虚伪的意思 虚伪的 虚伪什么意思 华丽的虚伪作品 虚伪的反义词 虚伪是什么意思 虚伪王庭作品 讽刺人虚伪带字图片 虚伪的郑邦山 实像虚像 虚像 实像和虚像的区别 实像和虚像的区别图解 虚像和实像的区别 实像与虚像的区别 虚像与实像的区别 小孔成像是实像还是虚像 虚写