• Kotlin-Android 开发日志


    需求:

    完成一个注册页面,要求可以上传头像。

    遇到的问题:

    1、对于kotlin中访问Android图片库的方法并不熟悉;

    2、对于bitmap图像处理的方法并不清除;

    3、基于虚拟机的桥接方式,尝试多次依然失败;

    4、nodejs-express端对于multidata-from类型数据的解析方式并不熟悉;

    5、对于nodejs-express静态资源的访问;

    解决问题:

    问题1、2,在多方查询资料之后,了解了kotlin当中访问图片库的方法,这里给出替代吗和注释以供备份。

    Photo.setOnClickListener {
                /**
                 * 通过intent方法来传递需要获取的文件信息
                 */
                val intent = Intent()
                intent.action = Intent.ACTION_GET_CONTENT
    intent.type
    = "image/*" startActivityForResult(intent, 111) } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { /** * 重载函数,依据resultCode的值来处理获得数据 * resultCode的值由自己设定,可以前后对应即可 */ super.onActivityResult(requestCode, resultCode, data) when (requestCode) { 111 -> { /** * 由于Data传回的是一个uri值,所以需要通过这个值来获取对应的图片信息 * 以下代码参考自网络 */ bitmap = MediaStore.Images.Media.getBitmap( this.getContentResolver(), data?.data); /** * 通过resizeImage压缩图片 * 其中涉及到dp单位到px单位的转换运算 * 由于在前端布局使用的是dp,而对于图片使用的是像素单位的压缩运算 * 所以需要进行换算 */ bitmap = resizeImage(bitmap, 150 * this.resources.displayMetrics.density, 150 * this.resources.displayMetrics.density) Photo.setImageBitmap(bitmap) } } } fun resizeImage(bitmap: Bitmap, Float, height: Float): Bitmap { val bmpWidth = bitmap.width val bmpHeight = bitmap.height val scaleWidth = width.toFloat() / bmpWidth val scaleHeight = height.toFloat() / bmpHeight val matrix = Matrix() matrix.postScale(scaleWidth, scaleHeight) return Bitmap.createBitmap(bitmap, 0, 0, bmpWidth, bmpHeight, matrix, true) }

    3、虚拟机的桥接过程

    由于对于桥接模式的具体原理并不清楚,一直认为此时虚拟需要访问的主机ip是‘10.0.2.2’

    但是实际上无法使用,最后参看了官方的文档,在终端中使用netcfg命令获得了当前Android虚拟机的ip

    但是在获得IP之后,发现虚拟机无法ping通主机,而主机可以ping通虚拟机,说明本机防火墙未关闭

    尝试之后,问题成功解决。

    4、nodejs-express对于multidata-from的数据解析

    查询资料之后,得知了‘formiable’这个中间件,于是对于使用方法进行了学习,以下给出代码。

    //创建套件
        var form = new formidable.IncomingForm();
        //设置文件上传存放地址,在这里配置了本地文件的默认保存位置,
        //此时文件名称是一个upload开头的随机字符串
        form.uploadDir = "./uploads";
        //执行里面的回调函数的时候,表单已经全部接收完毕了。
        form.parse(req, function(err, fields, files) {
            
            for(key in files)
            {
                /**
                    遍历整个文件对象,将upload——XXXX格式的文件名称修改为自己需要的名称
                    在这里由于我在前端中传回了一个名称,所有就修改为这个名称
                **/
                let file = files[key]
                fs.rename('.//'+file['path'], './/uploads//' + file['name'], err=>{
                    if(err) console.log(err)
                })
            }
            
            
        });

    5、nodejs-express静态资源的访问

    这个问题在很久之前就已经碰到过,但是对于具体的代码还是不太熟悉,这里给出记录。

    app.use('/uploads',express.static('./uploads'));
    第一个参数表示路由地址
    第二个参数表示本地文件夹的路径
  • 相关阅读:
    BFS(广搜训练题目)
    练习赛1(补题)
    练习赛1(AC题)
    codeup 1743: 算法3-4:表达式求值
    数学相关(更新ing)
    c语言常用函数(更新ing)
    大牛的博客(学习不止,更新不止)
    51nod 1005 大数加法
    js1-----预览js内容
    css10---转载---定位,浮动
  • 原文地址:https://www.cnblogs.com/loenvom/p/14204663.html
Copyright © 2020-2023  润新知