1.在讯飞开放平台创建应用
2.1 代码解压,将下图3个java文件复制到Android项目的与MainActivity.java同一个目录下
2.2 我把ltp中的main函数改成了tuque函数,并传入了参数,以便在MainActivity中调用。
public static void tuque(String TEXT, TextView guarani) throws IOException {
System.out.println(TEXT.length());
Map<String, String> header = buildHttpHeader();
String result = HttpUtil.doPost1(WEBTTS_URL, header, "text=" + URLEncoder.encode(TEXT, "utf-8"));
System.out.println("itp 接口调用结果:" + result);
guarani.setText(result);
}
在MainActivity.java中加入如下代码:
String TEXT = "我爱机器学习";
try {
ltp.tuque(TEXT, guarani);
} catch (IOException e) {
e.printStackTrace();
}
其中,guarani是我定义的在界面上显示结果的TextView控件。
2.3 (坑1)此时ltp.java中的
import org.apache.commons.codec.binary.Base64; import org.apache.commons.codec.digest.DigestUtils; 这两行代码会变红,这时要在build.gradle中添加依赖:
2.4 (坑2)需要把科大讯飞的接口地址的http改成https。否则排除万难可以跑通却不显示结果。因此我打印出异常,发现是:W/System.err: java.io.IOException: Cleartext HTTP traffic to *** not permitted
因为Android9.0(API 28)对http请求的限制。规定所有应用程序默认使用 Https进行网络通信,不能使用Http进行明文通信。这个规定导致app的Http访问权限受限,从而抛出异常。在官网给的demo里接口地址是 而讯飞开放平台控制台给的:
2.5 (坑3)此时运行到真机会报错,需要在app的build.gradle中添加如下代码:
packagingOptions { exclude ‘META-INF/DEPENDENCIES’ exclude ‘META-INF/NOTICE’ exclude ‘META-INF/LICENSE’ exclude ‘META-INF/LICENSE.txt’ exclude ‘META-INF/NOTICE.txt’ } 我看的这篇博客。
2.6 (坑4)现在运行到真机还是会报错,因为现在是在主进程访问接口,可能会造成阻塞,所以Android Studio报错,最简单的方法是强制Android Studio忽略这个问题,我在MainActivity.java里的onCreate方法前加上
@SuppressLint("NewApi")
在onCreate方法里加上
StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
3 完成
我到这里就跑通并可以正确显示结果了。
|