作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 wunderground API 制作一个天气应用程序。我还使用 Retrofit2 和 GSON 库。
以下是获取 JSON 响应的 API URL 格式:
http://api.wunderground.com/api/API_KEY/conditions/q/ISO_COUNTRY_CODE/CITY_NAME.json
我声明了一个 java API_Interface,如下所示:
public interface API_Interface {
@GET("/api/{apikey}/conditions/q/BD/{city}.json")
Call<CurrentObservation> getCurrentWeather(
@Path("apikey") String apikey,
@Path("city") String city);
}
并尝试从 MainActivity
传递 apikey
和 city
,如下所示:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Constants.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
API_Interface weatherService = retrofit.create(API_Interface.class);
Call<CurrentObservation> call = weatherService.getCurrentWeather(Constants.API_KEY,"Dhaka");
call.enqueue(new Callback<CurrentObservation>() {
@Override
public void onResponse(Call<CurrentObservation> call, Response<CurrentObservation> response) {
textView.setText(response.body().toString());
Log.d("result",response.body().toString());
}
@Override
public void onFailure(Call<CurrentObservation> call, Throwable t) {
textView.setText("Something went wrong: " + t.getMessage());
Log.e("error",t.getMessage());
}
});
这是Constant
类:
public class Constants {
public static final String BASE_URL="http://api.wunderground.com";
public static final String API_KEY="b5efba6dc63cc1b1";
}
这是 CurrentObservation
类的 POJO 模型:http://paste.ubuntu.com/22291964/我已经重写了模型中的 toString() 方法。
还有一些其他 POJO 类 -
但是这种方法给出了空响应,如下所示-
Weather Status: null
Pressure: null
Humidity: null
Temperature: null
这是来自 API URL 的实际 JSON 响应 - http://paste.ubuntu.com/22292683/
如何将参数传递给@GET以获得正确的响应?
最佳答案
您的基本网址应如下所示:
http://blah.com/api/blah/
你的@GET
方法应该有一个像这样的URL
api/{apikey}/conditions/q/BD/{city}.json
编辑:您可能使用错误正文
调用了onResponse
。请根据您的用例调整以下代码:
public static boolean handleError(Retrofit retrofit, Response<?> response) {
if(response != null && !response.isSuccessful() && response.errorBody() != null) {
Converter<ResponseBody, ErrorResponse> converter = retrofit.responseBodyConverter(ErrorResponse.class, new Annotation[0]);
try {
ErrorResponse errorResponse = converter.convert(response.errorBody());
// do something
} catch(IOException e) {
Log.e(TAG, "An error occurred", e);
}
return true;
}
return false;
}
关于java - 如何向 Retrofit Java 接口(interface)上的 @GET() 方法传递一些参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38784849/
我是一名优秀的程序员,十分优秀!