Android Retrofit请求服务器返回字符串(非JSON)

    今天,笔者在学习微软语音识别认知服务的开发中遇到了一个问题,那就是微软 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 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 call=request.getCall("c8f279f104024625bfaa155f33d8d1b5");  //此key将过期

        //发送网络请求(异步)
        call.enqueue(
                new Callback() {
                    //请求成功时回调
                    @Override
                    public void onResponse(Call call, Response response) {
                        System.out.println(response.body());
                    }

                    //请求失败时回调
                    @Override
                    public void onFailure(Call call, Throwable t) {
                        System.out.println("连接失败");
                      //  t.printStackTrace();

                    }
                }
        );

    }

}

————————————————————————————————————————————————————————————————————————————————————————————
看看运行结果:



可以看到成功获得了字符串。


你可能感兴趣的:(Android,android,android,studio,Retrofit)