意外的元素
意外的元素 (uri:"", local:"base-extension")。所需元素为<{}codename>,<{}layoutlib>,<{}api-level>
我修改了gradle的版本好了。
Android不会自动导包也不报错
这个问题我设置了auto import,但是还是不会自动导包,也不包错。
原因是插件不兼容,或者老旧的问题,把butter knife插件删除就好了。
Android4.2.1Gradle没有task,打包不了aar库
解决方法
打开设置,找到Experimental 里,去掉上图中的那个勾
点击gradle,就有了。
Mqtt,EOFException
onIotDisconnected...已断开连接 (32109) - java.io.EOFException
我这里报这个错是因为连接ID重复了
Gson解析json
Gson解析json时,bean注意了,不要混淆了,否则无法赋值。它是通过反射的方式去给字段赋值的。
Nuxt.js多环境
开发的时候,我们有dev环境,测试的时候我们有test环境,上线的时候我们有prod环境
通常来说,我们会连接到不同的服务器上。
如果根据不同的启动方式来使用不同的服务器地址呢?
前置条件
安装cross-env
npm install cross-env --save
脚本
在package.json中 生产模式的
"build": "cross-env NODE_ENV=prod nuxt build",
开发的脚本
"dev": "cross-env NODE_ENV=dev nuxt",
测试的脚本:
"test": "cross-env NODE_ENV=test nuxt build",
也就是我使用不同的方式启动,这个NODE_ENV
的值就不一样,build则是prod,dev则是dev,test构建则是test
这样子,前置的环境就有了。
如何获取到当前的环境呢?process.env
,注意,不要写错,evn。
不同环境下的值
我们创建一个env.js
的文件,名字你随便取:
以上是我的url的配置,我只配置了开发环境和生产环境。
配置环境中的常量
我们可以拿到了对应的env,那么还没有我们的url值呢,需要配置一下。
首先在nuxt.config.js
导入env.js
文件,然后添加以下配置
import env from './env';
module.exports = {
env: {
BASE_API: env[process.env.NODE_ENV].BASE_API,
ACCOUNT_PATH: env[process.env.NODE_ENV].ACCOUNT_PATH,
UCENTER_PATH: env[process.env.NODE_ENV].UCENTER_PATH
},
.....
}
这个能看懂吧,到这里就配置好了,注意层级不要放错,单词不要写错。
图片加水印
有同学在群里说我们的文章被别人全部复制,并且转成了原创。
有如此不要脸的同行,那么我们就做一下水印吧。
//读取图片流
java.awt.Image image = ImageIO.read(inputStream);
// 获取图片的宽
int imgWidth = image.getWidth(null);
// 获取图片的高
int imgHeight = image.getHeight(null);
log.info("imgWidth ==> " + imgWidth);
log.info("imgHeight ==> " + imgHeight);
int angel = 45;//旋转角度
//每个水印水平间隔,我打算一行4个的样子
int xpadding = imgWidth / 4;
//每个水印垂直间隔
int ypadding = imgHeight / 4;
//字体也要动态大小
int fontSize = ypadding / 6;
//但是也不能太小
if (fontSize < 8) {
fontSize = 8;
}
//创建一个空白的容器
BufferedImage bi = new BufferedImage(imgWidth, imgHeight, BufferedImage.TYPE_INT_ARGB);
//拿到画笔
Graphics2D g = bi.createGraphics();
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
//绘制原图片
float alpha = 1F;
AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha);
g.setComposite(ac);
g.drawImage(image, 0, 0, imgWidth, imgHeight, null);
//开始绘制水印
//水印字体,我读取的是微软雅黑,我也不知道要不要钱,没查,哈哈。
Font font = Font.createFont(0, this.getClass().getResourceAsStream("/msyh.ttc")).deriveFont(Font.BOLD, fontSize);
g.setFont(font);
FontRenderContext frc = g.getFontRenderContext();
TextLayout tl = new TextLayout(text, font, frc);
//水印串宽度
int stringWidth = g.getFontMetrics(g.getFont()).charsWidth(text.toCharArray(), 0, text.length());
//旋转水印
g.rotate(Math.toRadians(angel), (double) imgWidth / 2, (double) imgHeight / 2);
//水印透明度
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.4F));
// 字体色
g.setColor(Color.gray);
int x = -imgHeight / 2;
int y = -imgWidth / 2;
//循环绘制
while (x < imgWidth + imgHeight / 2) {
y = -imgWidth / 2;
while (y < imgHeight + imgWidth / 2) {
Shape sha = tl.getOutline(AffineTransform.getTranslateInstance(x, y));
g.fill(sha);
y += ypadding;
}
x += stringWidth + xpadding;
}
//释放资源,我为什么要用byteArrayOutputStream,因为我不想写到文件,直接写到内存
//弄完以后上传到COS
g.dispose();
ImageIO.write(bi, "PNG", byteArrayOutputStream);
return byteArrayOutputStream.size();
下面就传一张图试试看