如何使用 Retrofit 获取不同的对象 Android
How to get different objects with Retrofit Android
我在 Android Studio 中使用 Retrofit 1.9.0 从我的 REST API.
获得响应
我想做的方法是GET,在这个URL:http://dotfreeride.com/api/rest/adventures.php
我成功检索到另一个 API 的响应,但只有 1 个对象,这个有 3 个大对象。
我的IApiMethods界面是这样的:
@GET("/adventures.php")
JSONObject getAdventures(
Callback<AdventuresApi> cb
);
我的AdventuresApi(模型class)是这样的:
public class AdventuresApi {
public String adventure_id;
public String trimaps_context;
public String name;
public String video_url;
public List<ArrayPoi> array_poi;
public class ArrayPoi {
String poi_id;
String name;
String lat;
String lng;
String video_url;
}
}
我在Activity中的Retrofit调用是这样的:
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(API_URL)
.build();
IApiMethods methods = restAdapter.create(IApiMethods.class);
Callback callback = new Callback() {
@Override
public void success(Object o, Response response) {
}
@Override
public void failure(RetrofitError error) {
Log.e("JSON", "NO DATA!");
}
};
methods.getAdventures(callback);
我真的不知道如何获取对象,我想获取对象的名称(示例:其中 trimaps_context 是 "verb",我需要名称 "Powder Hound")
对于单个对象,我在 onResponse(Object o, Response response)
中成功地做到了:
(ProfileApi) profileData = (ProfileApi) o;
Log.e("JSON", profileData.name + " " + profileData.email);
1) 您正在尝试结合同步和异步调用。如果你想异步执行一个请求,你必须这样定义它:
@GET("/adventures.php")
void getAdventures(
Callback<List<AdventuresApi>> cb
);
2) 不要在每次调用请求时都创建 RestAdapter
实例。真是重量级操作。使用 singleton pattern。然后你可以简单地调用:
ApiManager.getAdapter().getAdventures(...);
3) 对象映射由参数化 Callback
class:
提供
ApiManager.getAdapter().getAdventures(
new Callback<List<AdventuresApi>>() {
@Override
public void success(List<AdventuresApi> adventures, Response response) {
// here you can access the adventures list
}
@Override
public void failure(RetrofitError error) {
// handle error
}
});
我在 Android Studio 中使用 Retrofit 1.9.0 从我的 REST API.
获得响应我想做的方法是GET,在这个URL:http://dotfreeride.com/api/rest/adventures.php
我成功检索到另一个 API 的响应,但只有 1 个对象,这个有 3 个大对象。
我的IApiMethods界面是这样的:
@GET("/adventures.php")
JSONObject getAdventures(
Callback<AdventuresApi> cb
);
我的AdventuresApi(模型class)是这样的:
public class AdventuresApi {
public String adventure_id;
public String trimaps_context;
public String name;
public String video_url;
public List<ArrayPoi> array_poi;
public class ArrayPoi {
String poi_id;
String name;
String lat;
String lng;
String video_url;
}
}
我在Activity中的Retrofit调用是这样的:
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(API_URL)
.build();
IApiMethods methods = restAdapter.create(IApiMethods.class);
Callback callback = new Callback() {
@Override
public void success(Object o, Response response) {
}
@Override
public void failure(RetrofitError error) {
Log.e("JSON", "NO DATA!");
}
};
methods.getAdventures(callback);
我真的不知道如何获取对象,我想获取对象的名称(示例:其中 trimaps_context 是 "verb",我需要名称 "Powder Hound")
对于单个对象,我在 onResponse(Object o, Response response)
中成功地做到了:
(ProfileApi) profileData = (ProfileApi) o;
Log.e("JSON", profileData.name + " " + profileData.email);
1) 您正在尝试结合同步和异步调用。如果你想异步执行一个请求,你必须这样定义它:
@GET("/adventures.php")
void getAdventures(
Callback<List<AdventuresApi>> cb
);
2) 不要在每次调用请求时都创建 RestAdapter
实例。真是重量级操作。使用 singleton pattern。然后你可以简单地调用:
ApiManager.getAdapter().getAdventures(...);
3) 对象映射由参数化 Callback
class:
ApiManager.getAdapter().getAdventures(
new Callback<List<AdventuresApi>>() {
@Override
public void success(List<AdventuresApi> adventures, Response response) {
// here you can access the adventures list
}
@Override
public void failure(RetrofitError error) {
// handle error
}
});