今天,笔者在学习微软语音识别认知服务的开发中遇到了一个问题,那就是微软 cognitive token (获取token的api: https://api.cognitive.microsoft.com/sts/v1.0/issueToken)时返回的是字符串,而不是json格式,笔者的开发环境是android studio 2.3.3, 使用Retrofit来作为网络请求库。
之后,笔者查阅了网上的有关教程,无外乎都是请求json数据,使用addConverterFactory(GsonConverterFactory.create())来作为转化器,如果业务需求是请求字符串,而不是json数据格式呢,继续使用这个转换器就会产生错误。
那么,如何使用Retrofit请求服务器返回一段字符串呢?
首先,来到官方文档查阅:http://square.github.io/retrofit/ 找到如下:
可见,官方已经提供了一个字符串的转换器,那么接下来把它导入项目使用就可以了,步骤如下:
①添加gradle依赖:
compile 'com.squareup.retrofit2:retrofit:2.1.0' compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0' compile 'com.squareup.retrofit2:converter-scalars:2.0.0' //导入scalars包
②创建用于描述网络请求的接口:
public interface POSTToken_Interface { @POST("sts/v1.0/issueToken") Call<String> getCall( @Query("Subscription-Key") String subscriptKey ); }③开始请求:
实现功能:获取微软cognitive token
实现方案:采用
Post
方法对https://api.cognitive.microsoft.com/sts/v1.0/issueToken
发送网络请求api的数据格式:
请求参数:
Subscription-Key: 在Azure上订阅某接口的订阅号
返回格式:String: 字符串
具体实现如下: public class POSTToken extends AppCompatActivity { @Override public void onCreate(Bundle saveInstanceState){ super.onCreate(saveInstanceState); setContentView(R.layout.activity_main); System.out.println("start"); request(); } public void request(){ //创建Retrofit对象 Retrofit retrofit=new Retrofit.Builder() .baseUrl("https://api.cognitive.microsoft.com/") .addConverterFactory(ScalarsConverterFactory.create()) //设置ScalarsConverter .build(); // 创建 网络请求接口 的实例 POSTToken_Interface request=retrofit.create(POSTToken_Interface.class); //对 发送请求 进行封装 Call<String> call=request.getCall("c8f279f104024625bfaa155f33d8d1b5"); //此key将过期 //发送网络请求(异步) call.enqueue( new Callback<String>() { //请求成功时回调 @Override public void onResponse(Call<String> call, Response<String> response) { System.out.println(response.body()); } //请求失败时回调 @Override public void onFailure(Call<String> call, Throwable t) { System.out.println("连接失败"); // t.printStackTrace(); } } ); } } ———————————————————————————————————————————————————————————————————————————————————————————— 看看运行结果: 可以看到成功获得了字符串。