我正在尝试从REST API中以字符串形式获取JSON。
我为此使用retrofit
和scalarConverter
。我可以传递URL来获取,并且改造实例也已成功创建,但是我没有从服务器得到任何响应。
PS:服务器上没有请求,因此这意味着我的请求没有从我的计算机中发出。
我是android新手,请帮助我。
创建改造实例:
Retrofit retrofit=new Retrofit.Builder()
.baseUrl(base)
.addConverterFactory(ScalarsConverterFactory.create())
.build();
jsonApi jsonapi=retrofit.create(jsonApi.class);
Call<String> stringcall=jsonapi.getStringResponse(speech);
jsonApi接口:
public interface jsonApi {
@GET
Call<String> getStringResponse(@Url String url);
}
基本:它是基本URL
语音:它是一个变量,包含要处理的其余URL。
当我运行时,该应用卡住了,此消息显示在“运行”标签中:
W/OpenGLRenderer: Fail to change FontRenderer cache size, it already initialized
W/art: Before Android 4.1, method int android.support.v7.widget.DropDownListView.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView
答案 0 :(得分:1)
在下面一行
Call<String> stringcall=jsonapi.getStringResponse(speech);
您仅获得一个Call
对象,该对象表示HTTP请求,仅此而已,该请求未执行。您需要使用该对象并调用execute
方法来发出同步请求,或者调用enqueue
方法来发出异步请求。
因此,如果您要发出同步请求,请尝试以下操作:
Retrofit retrofit=new Retrofit.Builder()
.baseUrl(base)
.addConverterFactory(ScalarsConverterFactory.create())
.build();
jsonApi jsonapi=retrofit.create(jsonApi.class);
Call<String> stringcall=jsonapi.getStringResponse(speech);
try {
Response<String> response = stringcall.execute();
String result = response.body();
} catch (Exception ex) {
//handle exception
}
Call
界面的文档为here,供您参考。