Coder Social home page Coder Social logo

italker's Introduction

使用MD设计的高效IM APP,http://coding.imooc.com/class/100.html

非常重要的事

盗版

我非常热衷开源,但是我希望大家都能尊重最初的作者,以上的技术全部都在我的实战课程中,欢迎购买课程支持我继续产出高质量内容。

最新发现很多人拿着课程的原版代码贴到自己项目中,贴进去无所谓,文件中有著名出处就好,但是我非常反感贴进去后还说是自己做的朋友;这就不厚道了哈。

祝大家学习愉快~~

如何学好课程?

我应该如何学好课程?

我想你应该问问你自己这句话,课程买了不是用来装B,因为单凭一个课程你还没法装B,我也没达到那么高的境界。

心态

言归正传,学习这门课程,你首先应该摆正你的心态,对于哪些一来就说这里不会哪里不好的同学,其实老师真的很难伺候。

什么样的心态才算正确?

这在课程第一节中就讲过了,你不需要畏难,你不需要懂全部的技术,你只需要放空心态,然后跟我的步骤走就好。

对于那些只学过Android的朋友学习服务器开发其实不必担心,最难的就是环境搭建和项目建立,这个步骤很繁琐容易出错,老师也没那么多时间规划去讲,但是你Android开发都能完成,又怎么不能完成服务器的环境搭建呢?相信你自己!

而对于只会Java的朋友,我想这才是比较困难的,因为Android说简单却需要学习很多,如果你属于这类,你联系我,我有入门教程。

OK,环境心态准备好了后,就跟着我一起开发吧。

debug

在开发过程中你会遇到软件的重重崩溃,或者接口不是预期等情况,其实只要代码在你手中,不是环境问题,那么99%可以通过debug调试解决。

这个部分我想是你们的弱点所在,后续抽时间我完成一篇文章给你们讲讲,现在你们只要记住遇到问题加断点调试,调试是程序员开发软件的基础必备技能,越早学好,你的优势越大。

常见问题

服务器运行没有看见欢迎界面

对于这个问题只可能出在3个地方:

  1. 环境没有搭建好。

对于这个情况你需要反复确定你的tomcat服务器已经可以在本地跑起来;idea不是社区版本,社区版本不提供web支持。 对于部分用户电脑tomcat安装在系统目录需要给tomcat目录设置所有用户可读写权限,win用户在文件夹属性-安全里边,Mac用命令解决。

  1. 代码没有写对,这个部分出在build文件中的依赖项目写错的情况,和群里代码对比即可。

  2. gradle依赖未完成,服务器的运行依赖于很多框架的支持,这些都是通过gradle来完成的,所以确保gradle版本正确,你的网络正常,目前电信没问题,出问题的大部分是网通,长城等同学。

数据库没有生成表

对于这个问题其实你把课程好好的看看,看清楚,看完整了,那么自然解决了。

那么问题在哪儿?问题一般来说是因为你没有完成初始化代码调用,没有调用初始化,数据库自然不会去做初始化操作。

图片画廊无权限崩溃

对于这个,你想说你已经添加了权限为什么还是崩溃?很简单:

  • Android6.0 以上设备需要动态授权,遇到这样的问题,要么去设置-APP-设置所有权限为允许;要么你往后接着看,后面章节有权限授权讲解。
  • Android7.0 以上需要使用Provider进行文件夹目录操作,百度一下你就知道怎么办了;So Easy~

XXX_Table 类未找到

该问题出现在手机端,出现的情况无法编译。

  1. 首先你需要明白客户端我们使用的是DBflow作为我们的数据库框架,这个框架不同于其他运行时数据库框架,运行时或多或少有一定的延迟,该框架是编译时数据库框架,什么意思呢?就是说数据库所需的东西在编译时自动生成,但是前提是能够编译成功。

  2. 既然有这样的条件那么出现XX_Table无法找到时请尝试rebuild操作,如果操作后失败,此时请看错误信息,错误信息或许很多,你可以略过找不到的错误然后看其他,当你看见一个不是找不到XX_Table的错误时,看看详细信息,然后去代码解决他,然后再次rebuild操作即可。

这样做的目的是解决自己的错误,然后通过rebuild让其自动生成对应文件,然后就OK了。

当然或许你看见的全部都是找不到,那么此时你需要检查你的DBflow框架依赖是否正确,同时检查找不到的类包名时候正确。

最正确的做法是:添加model-rebuild-再写逻辑

基础封装后Loading一直存在不进入主界面

对于该问题检查流程逻辑时候正确,如果都OK,那么看看是否由于个推未正确返回pushid导致的等待。

如果是那么可以确定是个推的问题,个推的SDK有一定可能在部分手机上出现该问题,建议的做法是,在获取pushid的方法上默认返回某一伪造的字符串,该字符串自然无法用于正常使用,只是用于通过第一步让你们可以学习后面的课程,毕竟后面还有很多很多。

对于这个SDK的问题,后面会有另外一篇文章讲解如何升级到最新SDK来解决。

学到推送部分,后台发送了消息手机未收到

这个问题分如下步骤检查:

  1. 服务器添加断点检查是否真的调用了个推的发送逻辑,如果没有从入口开始断点看看走过的路径来确定问题
  2. 第一步没有问题,那么检查手机端是否正确获取到pushid并请求接口进行绑定
  3. 检查手机端使用的个推key等参数时候和服务器为一整套,课程所个的无法正常调试
  4. 如果全部走过无法解决联系我吧

公共群

为了方便所有同学能一起相互交流,大家可以添加群:680054214

Android

italker's People

Contributors

qiujuer avatar

Stargazers

dbaspider avatar Ke Ke avatar Tu Tu avatar Dennis avatar Reborn avatar  avatar KBH avatar X avatar  avatar LeonYang avatar Wei Wang avatar 5imon avatar kalinaji avatar tzhang avatar iTalker avatar FangJu avatar liuqi avatar lansenboy avatar  avatar  avatar  avatar  avatar hydtyu avatar lee avatar 朱益 avatar  avatar  avatar 李松平 avatar Buffer avatar mrdonkey avatar raokii avatar jobcher avatar kevin-leak avatar  avatar Zhaohao avatar Linghailong avatar  avatar  avatar Mbingley avatar  avatar 月苏 avatar 颜崔 avatar iMisty avatar  avatar 卟咚啾吆哝咚呀 avatar wwttsqt avatar 崔鹏宇 avatar zhangwenhe avatar AL avatar V丶x avatar  avatar HaiDai avatar  avatar  avatar  avatar  avatar zexinChen avatar  avatar LoveFang avatar xxfen avatar aojiaoqiang avatar 湛卢 avatar  avatar  avatar  avatar dingrui avatar Lindroy avatar  avatar ZXFrank avatar RainBreath avatar EvanZch avatar Ellen avatar Watermelon avatar leo avatar xiao avatar wuzongjie avatar SwanOuyang avatar  avatar 尛飛俠 avatar zly1022 avatar fww161616 avatar  avatar Kong-zZ avatar Gzy avatar  avatar  avatar keihong.chan avatar charles avatar Bear avatar  avatar  avatar Lubin avatar  avatar  avatar linke avatar DYD avatar FreeStar avatar TeaOf avatar ericAndroid avatar  avatar

Watchers

James Cloos avatar 湛卢 avatar  avatar  avatar  avatar 七月的尾巴_葵花 avatar 郑再红 avatar zexinChen avatar zhangwenhe avatar  avatar  avatar 颜崔 avatar 青霜 avatar AL avatar  avatar HaiDai avatar dingrui avatar Watermelon avatar Lindroy avatar V丶x avatar  avatar Bear avatar  avatar fww161616 avatar

italker's Issues

第六章6-3中根据hibernate.cfg.xml生成数据库表 报错解决方案

首先在安装环境的时候应该都是比较新的环境,像我是java 11、mysql8.x、tomcat9.x。基本都是装的最新的,但是这个课程是17年的,所以多多少少都会出现一些适配上的问题,老师的代码是没有问题的,主要都是环境问题。说下我遇到的几个Exception

org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

这个是因为java9的原因,没有引入javax的jar包,手动引入就可以了

javax.activation-1.2.0.jar
http://search.maven.org/remotecontent?filepath=com/sun/activation/javax.activation/1.2.0/javax.activation-1.2.0.jar

jaxb-api-2.3.0.jar
http://search.maven.org/remotecontent?filepath=javax/xml/bind/jaxb-api/2.3.0/jaxb-api-2.3.0.jar

jaxb-core-2.3.0.jar
http://search.maven.org/remotecontent?filepath=com/sun/xml/bind/jaxb-core/2.3.0/jaxb-core-2.3.0.jar

jaxb-impl-2.3.0.jar
http://search.maven.org/remotecontent?filepath=com/sun/xml/bind/jaxb-impl/2.3.0/jaxb-impl-2.3.0.jar

在根目录下新建一个文件夹,比如lib

然后在build.gradle 添加一行代码

implementation fileTree(dir:'lib',include:['*.jar'])

问题解决

java.sql.SQLException: Unknown system variable 'query_cache_size'

原因是mysql-connecter-java的版本过低,很显然是数据库驱动程序与数据库版本不对应

build.gradle修改mysql驱动库的版本即可

    //MySQL 驱动库
    // https://mvnrepository.com/artifact/mysql/mysql-connector-java
    compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.11'
java.sql.SQLException: Unable to load authentication plugin 'caching_sha2_pa

MySQL在8.0后验证方式由mysql_native_password变为caching_sha2_password

低版本升级到8.0 验证方式不变,新用户使用8.0验证方式改变,而客户端不支持新的加密方式

打开sql命令行

ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #修改加密规则

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; #更新一下用户的密码

FLUSH PRIVILEGES; #刷新权限

alter user 'root'@'localhost' identified by 'xzx123456';#重置密码,xzx123456就是变更后的密码,自己的密码自己更改下哦

DONE

相关技术友情链接

在这里,附上课程使用的相关技术,部分文章是学生自己的分享,这里一起搬运过来放一起了~

聊天,语音表情按钮点击了没反应

在唤出输入法的时候,再点击语音和聊天整个panel会直接缩下去。模拟机没有问题,真机才有这个问题。在同学手机上测试了一下,有的可以有的不行,后来发现可以的那个手机是小米的,但那个手机把全面屏开启以后也出现了同样的问题,请问这个问题该怎么解决

慕聊录音界面出现Crash解决方案

问题描述

软件添加好布局后,进入聊天页面,初始化录音界面时触发Crash异常;表现错误为:
image
该问题是由于Lame库在进行初始化时出现的SO代码异常问题,是由于C语音部分代码异常导致返回的指针错误。该问题是Runtime异常,由于没有进行捕获所以会直接导致Crash。

解决步骤如下

第一步

打开项目根目录build文件:
image

并修改对应版本如下:
image

  • Lame版本:1.2.0
  • Support:27.0.2 (由于依赖的简单注解库提升,你提升后遇到问题可以直接安装版本即可)
    image

第二步

打开主项目build文件:
image

添加NDK过滤,由于其他库有全NDK,会有可能导致手机识别失败的情况。
image

路径:android->defaultConfig->ndk->abiFilters

        ndk {
            abiFilters "x86", "x86_64", "arm64-v8a", "armeabi-v7a", 'armeabi'
        }

第三步

打开AudioRecordHelper类,移除数组中的:192000
image
该问题是因为,Lame框架其实并不支持192000采样率的分析压缩,会导致数组溢出。目前来说没法解决,需要接手Lame核心代码修改。

第四步

同样在当前类中修改,搜索方法 record()
image

增加错误的捕获,减少可能出现的Crash情况,并且提示当前的错误代码信息。

End

好了,重新rebuild一次代码,重新运行吧;此时应该是OK了哈。
多谢大家对课程的支持,感谢~

希望老师对File Provider详细讲解一下

编写项目的过程中我按照老师的讲解完成了对galleryview的编写,也进行了运行时权限申请
但是程序崩溃
使用File Provider读取文件夹始终没有成功
求助(;′⌒`)

进入聊天页面(语音功能)闪退解决方案

image
如图所示,有时候进入界面出现闪退情况,仔细一看说的是XML初始化的时候出现Crash异常。
粗看一下以为是 AudioRecordView 控件问题,但是其实并不是,我们往错误下面看一下:
image
哎,可以看见是 net.qiujuer.genius.ui.widget.FloatActionButton 问题;如果你可以调试,可以进入调试看看,会发现其实是一个资源Id冲突导致的问题。

该问题已在GeniusUi库中升级得到解决,请更改版本后rebuild就好。
image

后台代码写了如何生成数据库表

有关这个BUG,其实在IM课程第五章节讲解的非常清楚的。
因为我们走的是“Code先行”的概念,意思就是我们不需要去管数据库是如何创建,应该如何编写SQL语句,因为这些不是我们的重点。
但是我们不懂数据库么?或许是或许不是,但是我们对Model之间的关系非常明白这就足够;所以在第五章我们花了整整一个章节的时间来讲解我们课程所需的Model关系和设计。

所谓的“Code先行”是指,我们开发者无须关系数据库的表创建与维护;但是我们需要知道我们的表是在何时创建的。

表不是我们手动创建,但是表一定有一个创建者,在我们的课程中这个表创建者就是Hibernate

当我们满足一下条件时表会自动创建:

  1. 我们建立了数据库
  2. 我们配置了数据库到项目的配置文件中
  3. 我们在配置文件中写明了表的配置
  4. 我们进行了Hibernate的初始化工作

以上条件缺一不可!!!

表的配置文件:hibernate.cfg.xml 可以参考第六章的代码。
Hibernate的初始化:Hib中进行初始化操作,这个调用的地方一般是接口调用的时候(所以你必须调用一个有关Hibernate初始化的接口)

很多同学就是没有调用,结果说没有创建表。

发送聊天信息之后出现ANR异常,且消息发送失败!

警告日志:tim 20180316161400
引发原因:
tim 20180316165555
当发送聊天信息时,需要将聊天信息存储到数据库中(DBHelp#save()),存储完成之后需要通知聊天列表这个观察者进行聊天列表刷新(DBHelp#notifySave()),DBHelp#notifySave()是在beginTransactionAsync开启的事务中执行的,所以此时事务并没有结束而是依然持有着数据库的链接,等到了界面刷新的逻辑ChatFragment#BaseViewHolder#onBind()方法里面时由于Message中的User是懒加载,所以需要重新从数据库中加载User的完成数据,所以需要持有数据库的链接,但是此时数据库的链接被DBHelp#save()#beginTransactionAsync()中的事务持有着,从而造成了死锁!导致界面刷新持续等待着,造成了ANR异常!
解决办法:
tim 20180316171452
将DBHelp#notifySave()的逻辑放到线程池中去异步执行,
这时候DBHelp#save()#beginTransactionAsync()方法就会执行完毕,事务就会完成掉,从而数据库的链接也会释放掉,当界面更新加载User数据时就不需要等待数据库链接,所以就不会形成死锁!

画廊界面出现权限崩溃异常

现象触发:

  • Android 7.0 部分手机因为FileProvider崩溃
  • Android 6.0 因为动态权限崩溃
  • 进入画廊页面

现象截图:

image

找问题

java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=5799, uid=10019 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()

核心的问题,从代码中可以看出就是说权限错误;那么这个问题如何解决??
当然是授权啊,授权并不是说在Manifest中添加就行;在Android6.0以后需要进行动态权限获取;具体的代码课程中有讲解,这里简单贴出一下:

boolean hasAll = PermissionsFragment.checkNetworkPermissions(this, getSupportFragmentManager())
        && PermissionsFragment.checkReadStoragePermissions(this, getSupportFragmentManager())
        &&PermissionsFragment.checkRecordPermissions(this, getSupportFragmentManager())
        &&PermissionsFragment.checkWriteStorageExternalPermissions(this, getSupportFragmentManager());

调用权限页面进行权限检测,当具有对应权限时再打开画廊界面即可。

PS:PermissionsFragment 是后面章节会讲解的动态权限管理器。

此时一般而言崩溃已经解决好了,这是因为动态权限引起的崩溃;如果你还没有学到动态权限的章节出现的问题,那么请进入系统设置-应用管理-找到APP-把所有的权限都打开-然后进入调试即可。

题外话

在部分同学的设备上出现了Android7.0 权限崩溃,其实课程的画廊界面并没有使用到7.0的东西,按理说应该不会崩溃,但是既然有同学反馈;那么我们来说说解决办法。

语音功能有一点不理解

语音连上网络发送正常,断开网络测试重新发送结果获取发送路径获取不到,图片发送是正常的,经过测试发现手机完全断网,在重新发送可以发出去,只把局域网断开就会获取不到路径,这是什么原因呢?

如何语义化版本号

日常开发中相信大家都没有注意过你们的版本号管理,比如:1.2.3;这个中的含义是什么?
很多同学肯定升级的时候都是随意的升级你的版本,而没有考虑具体的意义。

http://semver.org/lang/zh-CN/

image

RecycleView Adapter中TAG的作用

简单的说,Recycler就是把数据显示在View上的一个控件,只不过他具有复用VIew的功能;而对于对应关系我们希望能够做到的是:当知道数据集合中的一个item的时候能够访问到对应的VIew,并更新VIew的一些信息。

比如我们更新了数据的name字段,那么我们希望更新VIew对应的界面;这个过程recycler已经给我们搞定了。

那么还有一种情况,什么呢,就是当我们操作界面的时候比如我们在界面的某个view上点击了一下,此时我们希望能够一下就知道我们点击的是哪一个数据,好的此时因为View的复用性,他可能对应任意的数据。

那么当前对应的是什么呢?接口上来说并不提供,所以我们利用View的tag机制,当进行数据绑定的时候把数据绑定到View的tag上,那么当我们操作view的时候一下就可以从view的tag中拿出对应的数据出来,从而实现快速的操作,减少不必要的循环查询,以及错位的情况。

这就是类似于双向绑定的开发模式。

关于图片选择弹出框底部显示不全的问题

其实只要设置下GalleryView的setMarginBottom就可以了
经群里的同学提示,图片选择弹出框被隐藏部分的高度与顶部AppBarLayout的高度一样
这样问题就简单了,获取到AppBarLayout的高度,设置marginBottom就可以了。代码如下:
//获取AppBarLayout
appbar = (AppBarLayout) root.findViewById(R.id.appbar);
//获取AppBarLayout的控件高度
ViewTreeObserver vto = appbar.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
public boolean onPreDraw() {
//高度
int height = appbar.getMeasuredHeight();
Log.e("1234", "height = " + height);
CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) galleryView.getLayoutParams();
layoutParams.setMargins(0, 0, 0, height);//动态设置margin
return true;
}
});

当然,也可以直接在xml布局文件里面设置GalleryView,加上一定的marginBottom就好,更加简单粗暴。。。

ps:小白一枚,跟我一样的小白可以参考一下!!!

第六章跟着教程来的,不过报空指针,hibernate不能正常创建数据库

`HTTP Status 500 – Internal Server Error
Type Exception Report

Message java.lang.NullPointerException

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception

javax.servlet.ServletException: java.lang.NullPointerException
org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:434)
org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:372)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:389)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:342)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:229)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Root Cause

java.lang.NullPointerException
net.qiujuer.web.italker.push.utils.Hib.query(Hib.java:111)
net.qiujuer.web.italker.push.factory.UserFactory.createUser(UserFactory.java:173)
net.qiujuer.web.italker.push.factory.UserFactory.register(UserFactory.java:149)
net.qiujuer.web.italker.push.service.AccountService.test(AccountService.java:22)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
org.glassfish.jersey.server.internal.routing.SubResourceLocatorRouter$1.run(SubResourceLocatorRouter.java:158)
org.glassfish.jersey.server.internal.routing.SubResourceLocatorRouter.getResource(SubResourceLocatorRouter.java:178)
org.glassfish.jersey.server.internal.routing.SubResourceLocatorRouter.apply(SubResourceLocatorRouter.java:109)
org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:109)
org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112)
org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112)
org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112)
org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:112)
org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:92)
org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:61)
org.glassfish.jersey.process.internal.Stages.process(Stages.java:197)
org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:329)
org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
org.glassfish.jersey.internal.Errors.process(Errors.java:315)
org.glassfish.jersey.internal.Errors.process(Errors.java:297)
org.glassfish.jersey.internal.Errors.process(Errors.java:267)
org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:280)
org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:316)
org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1084)
org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:418)
org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:372)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:389)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:342)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:229)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Note The full stack trace of the root cause is available in the server logs.

Apache Tomcat/9.0.13`

服务器端问题

服务器端查看存储的时间,总是有8个小时的时差!
解决方案:

查看hibernate.cfg.xml 的jdbc连接数据库的url源码:
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/DB_I_T_PUSH?serverTimezone=UTC&amp;useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false</property>
其中的serverTimezone的值改为serverTimezone=Asia/Shanghai

在录音时,lame库,初始化失败

我想兼容so 库,没有使用 "arm64-v8a" 这个 ,初始化就报错了,换了几个手机都一样

ndk { abiFilters "x86", "x86_64", "armeabi-v7a", 'armeabi' }

升级gradle版本以后进入聊天记录页面报错

由于更新了NDK版本,整个工程开始报错,然后发现需要更新gradle版本才能和ndk版本匹配。
更新'com.android.tools.build:gradle:3.1.2'.
然后gradle是4.4的

编译以后进入聊天界面就报错
Caused by: android.view.InflateException: Binary XML file line #17: Binary XML file line #8: Error inflating class net.qiujuer.italker.common.widget.AudioRecordView
各方面检查了一下没有发现问题。

回退回原来的gradle版本就没有问题。

不太熟悉gradle不知道这种问题怎么定位。

课程代码正确导入方式-免404

许多同学都有出现课程导入后出现404错误,或者干脆无法启动起来;鉴于出现频率较高,所以写一篇文章给大家讲讲新的方案。

现象:

  1. 访问主页404错误
  2. 无法正常启动
  3. 访问主页没问题-访问登录注册接口异常

原因:

  1. Tomcat目录无权限(解决方案
  2. idea 导入时 gradle 依赖问题,这是最主要的问题点。

对于idea导入的问题,在群里有一份文档指出了方案,但是并不是所有的用户都是这个原因,发现有些同学导入时根本未提示Gradle依赖。

新导入方案

首先,导入时选择正确的文件夹:
image

一定选择到**“Web/iTalker”**上。

课程代码导入idea2018版本注意事项

本教程对应视频:链接 密码:kv8t

关于课程的前期准备:

  1. 安装MySQL,各个系统百度即可
  2. 安装Tomcat:
    1. 课程代码运行-Tomcat安装-Mac篇
    2. Tomcat 下载 “32-bit/64-bit Windows Service Installer” 即可,极为简单

之后就是导入项目代码:
课程代码正确导入方式-免404

但是上述方式导入后,发现依然有部分用户出现404错误,而且在我远程的情况下依然未解决。
之后,我翻出了古老的电脑,自己导入测试了一遍,发现idea push内容到Tomcat的时候其实是不完全的,没有把资源以及启动配置数据push过去,同时文件夹也不对。

但是,我进行 run config 中没有找到对应的解决方案。

基本上所有的场景都尝试过,调试过之后,发现是因为idea2018的问题;idea2018在项目创建或者导入时会默认把项目设置为java9项目,所以输出的数据不对。

当然解决方案就是调整回来即可。
image

课程代码运行-Tomcat安装-Mac篇

发现很多同学在Tomcat安装上遇到很多问题,其实在Mac上借助Brew可以非常轻松的安装Tomcat。
具体步骤如下。

  1. 安装HomeBrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

非常简单,执行命令即可,然后根据提示一步步的安装HomeBrew即可,随后就可以使用brew命令进行tomcat安装。

  1. 安装Tomcat
// 搜索tomcat是否存在:
brew search tomcat
// 安装tomcat:
brew install tomcat
// 检查是否安装成功:
catalina -h
// 运行tomcat:
catalina run
// Tomcat的默认端口是8080,如果运行成功可通过http://localhost:8080访问
  1. 获取Tomcat安装目录
brew info tomcat

image

关于OSS初始化client时AccessKey和AccessKeySecret的设置

由于老师视频是一年前的,现在OSS已经更新了API,以及一些常用设置
详情可参考官网链接:https://help.aliyun.com/document_detail/32044.htmlspm=a2c4g.11186623.6.708.5Dcfrk

首先是现在官网推荐使用STS的初始化client方式
image
这里如果按照老师视频里以前老的方法也是可以的,但是AccessKey和AccessKeySecret的设置出现了变化

老师以前是用的控制台里面的AccessKey和AccessKeySecret
image

这里在测试时发现这里的key没有权限访问OSS,出现如下error
image

经过尝试发现需要使用OSSjiemian的key才可以
image

如果大家也出现同样错误可以尝试使用OSS界面的AccessKey和AccessKeySecret

服务器外网部署计划-2019

部署服务器代码到外网服务器上,并运行APP的步骤。

总的来说我们需要进行如下步骤:

  1. 阿里云服务器准备(腾讯也行)
  2. 安装MySQL
  3. 安装Java环境
  4. 安装Tomcat
  5. 部署Tomcat
  6. Push项目文件到云服务器

共计6个步骤即可~~

重要重要:视频链接 密码: ngba
视频的配置是较老的版本,可以看看流程,然后按文档配置即可,文档后续会持续跟进最新版本。

云服务器购买
购买地址
image

扫码二维码打开也可以:
image

image

近期活动:双11活动
image

6-1添加mysql时,点击test connection显示failed

6-1添加mysql时,点击test connection显示failed,如果不填写“Database”这一行为“DB_I_T_PUSH_TEST”,只添加“root”和密码“123456”时,连接成功,但是添加后,就会failed。
PS:老师说的debug教程什么时候出哇~

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.