我从网络请求中获取回调的方法是通过接口。
假设有两个类,即A和B。类A发起由B执行的所有网络请求。当B完成任务时,它必须响应A。
我的方法是:
public interface MyCallback {
void onTaskDone(String successMessage);
void onTaskFailed(String failMessage);
}
public class A {
onCreate() {
B objectB = new B();
objectB.loginUser(username, password, new MyCallback {
void onTaskDone(successmessage) {
//this is called when task is successful
}
void onTaskFailed(failMessage) {
//this is called when task is failed
});
}
}
}
public class B {
public void loginUser(String username, String password, MyCallback callback) {
//after task is performed
if (task.isSuccessful()) {
callback.onTaskDone("Successful");
} else {
callback.onTaskFailed("Programming is fun they said...");
}
}
}
如您所见,如果任务成功完成,则从B调用接口方法,该方法在A中接收。
我的问题是:除了使用接口之外,还有其他更好的方法来获取回调吗?或者可以将该技术做得更好?在实施此技术时,我面临的一个问题是,例如,我在许多方法中都使用了相同的接口。在特定情况下,仅使用一种或两种方法,而其余方法保持未使用状态,例如。 B类可能永远不会呼叫onTaskFailed()
。某些方法完全未使用是正常的吗?
答案 0 :(得分:0)
Android有一个很好的第三方库,例如EventBus https://github.com/greenrobot/EventBus
您可以看到其文档,非常易于使用。
public class A{
onCreate(){
B objectB = new B();
objectB.loginUser(username,password); //no need to pass callback
@Subscribe(threadMode = ThreadMode.MAIN)
public void onSuccessEvent(SuccessEvent successEvent) {
//this is called when task is successful
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onErrorEvent(ErrorEventsuccessEvent) {
//this is called when task is failed
}
}
public class B{
public void loginUser(String username, String password){
//after task is performed
if(task.isSuccessful()){
EventBus.getDefault().post(new SuccessEvent("Successful"));
}else{
EventBus.getDefault().post(new ErrorEvent("Programming is fun they said..."));
}
}
您的活动课程
public class SuccessEvent {
private String message;
public SuccessEvent(String message) {
this.message=message;
}
}
public class ErrorEvent {
private String message;
public ErrorEvent(String message) {
this.message=message;
}
}
答案 1 :(得分:0)
我在底部找到了问题的答案:即接口方法未使用。
为了解决这个问题,我使用了抽象类!即抽象类将实现所有接口回调。 然后,在传递回调时,只需传递抽象类实例而不是接口。这样,只有* required方法可以被覆盖以获取结果。