【发布时间】:2017-08-14 18:39:00
【问题描述】:
我想让这个方法可重用,但我不确定如何提供一个可以在以下上下文中工作的参数:
-
service.getPosts() // The method called, i.e. getPosts() should vary depending on the class parameter for (Post object : postResponse.getResults()) { // I want the Post class to come from the parameterList<Post> objects = postResponse.getResults(); // I want the class passed into this list to also come from that same parameter
方法调用:
retrieveData(mCardAdapter, Post.class);
方法:
private void retrieveData(final CardAdapter mCardAdapter, final Class classParam) {
RetrofitService service = ServiceFactory.createRetrofitService(RetrofitService.class, RetrofitService.SERVICE_ENDPOINT);
service.getPosts()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<PostResponse>() {
@Override
public final void onCompleted() {
setRefreshingFalse();
Log.e("RetrofitService", "Retrofit Request Completed!");
}
@Override
public final void onError(Throwable e) {
setRefreshingFalse();
Log.e("RetrofitService", e.getMessage());
}
@Override
public final void onNext(PostResponse postResponse) {
if (postResponse != null) {
Log.e("RetrofitService", "Returned objects: " + postResponse.getResults());
for (Post object : postResponse.getResults()) {
Log.e("RetrofitService", object.getObjectId() + ": " + object.getText());
}
/*for (Post post : postResponse.getResults()) {
mCardAdapter.addData(post);
}*/
setRefreshingFalse();
mCardAdapter.clear();
List<Post> objects = postResponse.getResults();
mCardAdapter.addData(objects);
} else {
Log.e("RetrofitService", "Object returned is null.");
}
}
});
}
当我通过Class classParam 时,我只是得到Unkown class: 'classParam' 作为错误。
服务:
public interface RetrofitService {
String SERVICE_ENDPOINT = "https://parseapi.back4app.com";
@Headers({
"X-Parse-Application-Id: asdf",
"X-Parse-REST-API-Key: asdf"
})
@GET("/classes/Post")
Observable<PostResponse> getPosts();
}
发布对象:
public class Post implements Serializable {
private static final String CLASS_NAME = "Post";
private String objectId;
private String text;
public Post() {
}
public String getClassName() {
return CLASS_NAME;
}
public String getObjectId() {
return objectId;
}
public void setObjectId(String objectId) {
this.objectId = objectId;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
已更新(根据 Roman 的建议):
【问题讨论】:
-
When I pass Class classParam...的调用代码是什么? -
您可以使用接口还是无法控制传入的类的来源?
-
我用 POJO 和 Rest 接口更新了我的问题,但我想我的意思是我只想能够对不同的类重用 retrieveData 方法,所以我不必重写代码。
-
你是说你不想要泛型使用,因为它需要重写代码并且更喜欢类型值对和强制转换?
-
非常简单的例子。在调用
retrieveData(...)之前说一下,我有一个带有列表的对话框,即developer.android.com/guide/topics/ui/dialogs.html#AddingAList。测试仪有一个可以选择的类列表。在按下其中一个类时,我们调用retrieveData(...)。如果选择是“Post”,我们称 Post 对象。如果是“评论”等...可以将retrieveData(...)方法复制并粘贴10 次,但那有什么乐趣呢? :P
标签: java object methods delegates