飞飞的AI实验室

用AI放大灵感,把想法变成作品。

老套路,先晒图

图一:
这里写图片描述
如题,在编译打包时遇到了如上错误,很明显这是一个依赖库冲突的问题,我的app下依赖一个 ad library,而 ad library有依赖了一个 http library,这是一个我用okhttp封装的网络请求库,而 ad library 又依赖了 compile ‘com.squareup.okhttp3:okhttp:3.9.1’ 这依赖关系确实有点混乱,那这时候有人说了,你的 ad library为什么不用 http library里面的okhttp呢?自从AS3.0 gradle4.0开始依赖使用 implementation 代替了 compile 关键字,因此 compile 就被过期了,http 虽然依赖了 okhttp ,但是 ad library要想使用 okhttp 是不可以的,因为使用implementation 对于ad library 是不可见的,所以ad library又依赖了一次 compile ‘com.squareup.okhttp3:okhttp:3.9.1’ 因为 ad library需要单独的进行定制化的网络请求配置,所以 ad library中的网络请求是没有封装进http library中的,所以导致了重复依赖的问题,使用 implementation 关键字虽然可以屏蔽ad library访问 http library中 okhttp 的api,但是依赖冲突的问题确实还是存在的…

于是乎,网上搜了一篇帖子:

https://stackoverflow.com/questions/45111497/android-gradle-failed-multiple-dex-files-define-okhttp

看来一下和我的情况一毛一样,报的错误也一样,直接戳到Answer处,解决方式如下

图二:
这里写图片描述

然后直接去除掉重复的依赖,修改如下后,再rebuild

图三:
这里写图片描述

心里想着,这个问题终于解决了,喝了口水,长呼了一口气。。。

我擦,竟然又爆红了,我勒个去,什么情况?这不科学啊,什么鬼?心里很郁闷,这是为什么呢?

阅读全文 »

点击上面蓝色字体关注“IT大飞说”

在 Android 开发中,从最原生的 HttpClient 和后来的 HttpUrlConnection,再到Volley、AsyncHttpClient 等网络请求框架,最后到 Square 公司开源的 okhttp,一时间 okhttp 风靡整个开发圈,进而衍生了好多大牛对 okhttp 的封装开源库,像鸿洋大神封装的 okhttputils,还有 Okgo … 然后就是 Retrofit 了,其实它也是对 okhttp 的封装,Retrofit 使得网络请求更优雅,灵活性更高,支持各种适配器和转换器,可以搭配 RxJava 一起使用,一度后来基于 RxJava + Retrofit + MVP 这种架构设计非常流行,网上关于这种的文章也更是层出不穷,目前 retrofit 在 GitHub 上有将近 3w 的 Star,目前可以说是非常稳定了。

1.初识 Retrofit

简单说,Retrofit 是一个支持 RESTful api 架构的 http 网络请求框架的封装库,Retrofit 封装了许多自定义的注解,大大方便和简化了使用,另外灵活性也更高,底层采用 okhttp 实现真正的网络请求,他们的关系可以说是分工协作吧,总结一成一句话就是:Retrofitokhttp 网络请求更优雅!

他们的关系可以看下图可能更容易理解:

2.小牛试刀

2.1我们先来个简单的 GET 请求

首先在 Gradle 中添加 Retrofit 的依赖:

阅读全文 »

点击上面蓝色字体关注“IT大飞说”
置顶公众号(**ID:ITBigFly**)第一时间收到推送
![](https://cdn.jsdelivr.net/gh/xinpengfei520/my-cloud-picture@master/IMG_2022/202210061551171.jpeg) >上一篇文章[深入浅出Retrofit2.x(一)](https://mp.weixin.qq.com/s/jxBEg7dpFfTNLXNFdvJjrw)中,我们讲解了 **Retrofit** 的最基本用法,以及 **GET** 请求示例,非常简单,相信大家都已经会使用了,本篇文章将继续介绍 **Retrofit** 的一些其他的一些常用用法,主要围绕如何使用 **POST** 请求提交表单数据,提交 **json** 字符串作为请求体,还有一些 **Retrofit** 的相关注解介绍等。

1.POST 请求我最行

大家在和服务交互的时候,大多情况下都应该使用的是 GET、POST 请求吧,下面我们就对 POST 各种数据类型及如何定义接口进行说明。

1.1 POST 提交表单数据

首先定义一个如下接口,如果是单参数或者是双参数的话可以这么写:

1
2
3
4
5
@FormUrlEncoded
@POST("/")
Call<ResponseBody> postFormData(
@Field("name") String name,
@Field("occupation") String occupation);

如果参数较多的话可以使用 @FieldMap 注解

1
2
3
4
5
6
// 提交 FORM 表单数据
@FormUrlEncoded
@POST("{url}")
Call<ResponseBody> postFormData(
@Path("url") String url,
@FieldMap Map<String, String> params);

另外 @Field@FieldMap 也可以结合在一起使用。

阅读全文 »

**==**是运算符而equals是比较方法。

##1、==运算符

(1)基本数据类型比较值:只要两个变量的值相等,即为true
注意:当基本数据类型使用“==”进行比较时,符号两边的数据必须类型兼容(类型相同或可自动类型转换),否则编译出错;

(2)引用类型比较引用:比较两个对象的地址值,两个引用变量指向同一个对象的堆空间时,才为true

1
2
3
4
Person p1=new Person();   
Person p2=new Person();
if(p1==p2) //false
p1=p2;//如果有这样的赋值语句后 if(p1==p2) //true

注意:当引用类型使用“==”进行比较时,符号两边的数据类型必须兼容(类型相同或有父子类关系),否则编译出错;

1
2
3
4
5
Person p=new Person();
String str="hello";
if(p==str)//错误,p和String类型不兼容,Person和String类型无父子类关系
Student stu = new Student();//Student extends Person
if(p==stu)//编译通过

##2、equals方法

(1)equals():所有类都继承了Object,也就获得了equals()方法。
(2)自定义类可以重写equals方法
注意:如果一个类型没有重写过equals方法,那么调用equals等价于==

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Test {
public static void main(String[] args) {
Person p1=new Person();
Person p2=new Person();
if(p1==p2){

}
if(p1.equals(p2)){
//因为这里Person类没重写equals方法,那么p1.equals(p2)等价于p1==p2
}
}
}
class Person{

}
阅读全文 »

好多童鞋新买的电脑,系统默认的是C盘占了所有的空间,这样我们管理起来很不方便,好多东西全部都混在一个C盘中,对于一个追求条理的人来说,特别不爽!因此要自己对磁盘进行分区;我个人喜欢一般会将磁盘分为四个区,C盘装系统,D盘装软件,E盘装自己的一些文件和资料,F盘为娱乐,比如游戏和电影等。

下面我们就来进行分盘:前提是系统已经装好了,我们就不需要重装系统了,我们还有一些资料,分完区之后我们的资料也不会丢失,详细步骤如下:

1.快捷键win+X,打开磁盘分区,对要分区的磁盘进行压缩,输入分出的磁盘大小执行压缩,然后对分出来的分区右键执行新建分区,然后一路点击下一步即可,它的原理是压缩出磁盘分区中空白的区域,然后进行逻辑分区,因此不会覆盖和影响之前已经存储的区域。至于每个分区的大小就看个人的喜好了。

详细图文请看下面组图↓

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

最后感谢下面的文章:

参考图文教程:http://jingyan.baidu.com/article/425e69e6bbd0c7be14fc164a.html

阅读全文 »

上一篇文章讲解了重置 MySQL 的密码,有同学反馈无法程连接到数据库,这是因为 MySQL 安装完成后只支持 localhost 访问,我们必须设置一下才可以远程访问,另外还有一些 MySQL 8.0 连接时的一些问题,本文也会一并进行讲解如何解决。

1.登录MySQL

1
mysql -u root -p

输入您的密码

2.选择 mysql 数据库

1
use mysql;

因为 mysql 数据库中存储了用户信息的 user 表。

3.在 mysql 数据库的 user 表中查看当前 root 用户的相关信息

1
select host, user, authentication_string, plugin from user; 

执行完上面的命令后会显示一个表格

阅读全文 »

作为一个 Android 开发者,闲来无事,想着使用 JSP + Servlet 写一些简单的接口,然后通过前端调用接口,后端的数据库使用的是 MySQL。

1.安装 MySQL 数据库

安装比较简单,打开 MySQL 官网,我们是个人使用,所以下载最新的(8.0)社区免费版即可。

安装过程中可能需要您设置管理员密码,默认账号为 root,安装完成后就可以启动 MySQL 服务了,Windows下的启动命令如下:

使用管理员权限打开Windows PowerShell

开启MySQL服务: net start mysql80

关闭MySQL服务: net stop mysql80

2.连接 MySQL 服务

我们要创建并操作数据库首先要连接到数据库,连接数据的可视化工具比较多,如 Navicat、 MySQL Workbench、 SQLyog 等,当然,如果你对 MySQL 的命令行比较熟练的话,也可以使用命令来进行相关操作,我个人比较喜欢使用 Navicat。

注意,如果在连接的时候出现连接错误,前提是密码正确,大概报的意思是不支持老的密码方式,也就是说你的可视化工具的版本太低了,使用最新的可视化工具,或者在安装的时候,有两个选项,一个是增强型密码一个是非增强型密码,我们选择非增强型密码即可。

阅读全文 »

1.代码中

在 Activity 的 onCreate() 方法中设置两个Flag:

1
2
3
4
5
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.loading);

注意书写位置要放在setContentView之前!!!

2.AndroidMenifest.xml文件中

找到要设置的Activity声明标签,设置它的theme即可,例如:

1
2
3
4
5
6
7
8
9
<activity 
android:name=".MainActivity"
android:theme=" @android :style/Theme.NoTitleBar.Fullscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

如果要设置所有页面都为全屏的话就直接将theme属性添加到application标签中即可,例如:

1
2
3
4
5
<application 
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme=" @android :style/Theme.NoTitleBar.Fullscreen">
...

Thanks all.

阅读全文 »

自从第一次使用 Chrome 就喜欢上了它简洁、还有 icon 的独特风格,越用越发喜欢,越用越爽,深陷其中不能自拔,从此走上了一条不归路…

现在好多程序员都喜欢用它,它的优点有很多:

①页面简洁、阅读舒服;②支持各种强大的插件;③支持浏览器内部应用程序;当然也有一些劣势,但是这些劣势可以忽略,我觉得其优点完全大于其不足。

今天我就给大家推荐一些非常好用的 Chrome 插件,其中有些是我自己现在用的,还有一些是我在网上照的还有别的人推荐的一些,我觉得如果熟练使用这些插件可以极大地提高工作和学习的效率,还有你的逼格可以瞬间提升一个档次,就光这点可以秒杀千千万万的屌丝,哈哈~(自己以后慢慢体会)

1.Infinity-New-Tab

老规矩,先验货

xx:哇哦,好漂亮哦~

惊讶吧,喜欢吧,亮瞎眼了吧,欣喜吧,爱上了吧…没错!就是她,这是我见过的最漂亮的Chrome插件,漂亮的不像实力派。下面我就来说说它漂亮在哪?如果你是个标签控,不知道怎么整理这些杂乱的标签,那么我告诉你你狠幸运,因为你遇见她了,它强大的标签管理功能,可以自定义添加好多标签,每个标签对应一个圆形的ICON,相当漂亮,而且图标也很有标志性,你可以一眼就能看出它是哪个网站,平时常用的网站都可以添加进来,这样的话就不用自己整理和保存了,还有背景大图可以自己更换,让你在工作的同时也不缺乏你赏景,可以添加一些大自然的景色,开拓一下视野,有的童鞋问:如果我更换电脑了或者卸载了,我自己添加的这些标签岂不没有了,别担心,你可以注册一个账号将其同步到云端,下次用的时候同步下来就可以了,是不是很简单?还有它切换和滚动时的动画看着也特别舒服,另外还有一大堆很强的自定义设置功能,这里就不一一列举了,自己去发掘吧。

插件官网地址:

http://www.infinitynewtab.com/

阅读全文 »
0%