问题:
刚开始用讯飞写小Demo的时候比较快,基本上没有遇见什么错误,
主要是参考了这篇博客:https://blog.csdn.net/chenli_001/article/details/73603917
但是后面在项目里面集成的时候,一直显示空指针错误,一连好几天都没弄好。
java.lang.NullPointerException: Attempt to invoke virtual method ‘boolean com.iflytek.cloud.SpeechSynthesizer
.setParameter(java.lang.String, java.lang.String)’ on a null object reference
原因:
空指针也就是说使用的指针为null,所以空指针错误就是说使用这个指针调用方法相当于用null来调用方法,所以就要从这个指针入手解决。参考:https://zhidao.baidu.com/question/692912236600019684.html
解决(几种方法都可以试一下):
1.检查时候将官网sdk中的demo的libs下的所有文件全部复制到项目的libs和jniLibs目录下,同时libs下的jar包要右键add添加
2.检查APPID和项目中需要的sdk(注意这个sdk是和每个APPID匹配的,一定要用自己应用的APPID),同时确保初始化语句在onCreate中
// 将“12345678”替换成您申请的APPID,申请地址:http://www.xfyun.cn
// 请勿在“=”与appid之间添加任何空字符或者转义符
SpeechUtility.createUtility(context, SpeechConstant.APPID +"=12345678");
3.使用debug查错, 可以定位到哪里出了问题,即使显示不了具体哪地方出错,但是一个大概的范围还是能确定的,我中间是一遇到Loop语句程序就会停止,说明就是在这地方出错了,出现了空指针,更具具体情况可以修改或是注释掉都可以。
4.如果还不行,可以从下面几篇博客找找灵感:
https://blog.csdn.net/ggsza/article/details/103262695
总结
1.这次集成讯飞语音到项目中可谓是历经千辛万苦,熬了好几天,最后终于成功了,太激动了。
2.这次解决还有一个重要原因,就是使用debug查错,可以定位到哪里出了问题,即使显示不了具体哪地方出错,但是一个大概的范围还是能确定的,我中间是一遇到Loop语句程序就会停止,说明就是在这地方出错了,出现了空指针,更具具体情况可以修改或是注释掉都可以。
3.空指针也就是说使用的指针为null,所以空指针错误就是说使用这个指针调用方法相当于用null来调用方法,所以就要从这个指针入手解决。参考:https://zhidao.baidu.com/question/692912236600019684.html
4.中间还碰到一个小问题,就是我使用的Activity实现了点击事件的方法,所以中间使用按钮的监听事件setOnClickListener就不行,必须在重写的onClick()中实现按钮的触发。
public class VersionCheckActivity extends AppCompatActivity implements View.OnClickListener{
参考:
几乎将全网的各种情况都看了个遍
来源:CSDN
作者:qew2017
链接:https://blog.csdn.net/qew2017/article/details/104725940