gpt4 book ai didi

java - 如何从java接口(interface)/类似的using block 返回结果

转载 作者:行者123 更新时间:2023-12-02 04:22:25 25 4
gpt4 key购买 nike

我想知道是否可以改变我的方法的运行方式,类似于 Blocks iOS

所以我在类 API.java 中创建了这个接口(interface)

 public interface APIListener {
void apiResponseSuccess(String output);

void apiResponseFailed(String output);
}
public APIListener listener = null;
public void myMethod{
listener.apiResponseSuccess("output");
}

为了调用我创建的接口(interface),我必须实现API.APIListener。并覆盖函数

@Override
public void apiResponseSuccess(Object output) {
Log.i("output from api",(String) output);
}

@Override
public void apiResponseFailed(String output) {

}

要调用它,我必须使用:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);

API api = new API();
api.listener = this;
api.myMethod();

}

但使用此方法的缺点是,如果我在 API 中调用许多方法,则很难维护,因为所有结果都将转到我的类中的 apiResponseSuccess ,并且必须标记来自哪个方法。如果 iOS 带有 Blocks,事情就会变得更容易。所以基本上,有没有办法在我们调用它时直接返回接口(interface)方法。与此类似

   protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);

API api = new API();
api.listener = this;
api.myMethod(
public void apiResponseSuccess(Object output) {
Log.i("output from api",(String) output);
}
public void apiResponseFailed(String output) {

}); //so the result will go in separately inside the where the function is called.
}

最佳答案

您可以轻松实现它。

您的 api 方法应该获取 APIListener 作为参数 - 因此,当您调用它时,您将得到如下所示的内容:

api.myMethod(new APIListener() {
@Override
public void apiResponseSuccess(Object output) {
Log.i("output from api",(String) output);
}

@Override
public void apiResponseFailed(String output) {

}
});

当然你还可以传递更多参数:

api.myMethod(new APIListener() {
@Override
public void apiResponseSuccess(Object output) {
Log.i("output from api",(String) output);
}

@Override
public void apiResponseFailed(String output) {

}
}, "my String", true);

但是...请注意,在您当前的实现中, Activity 是 API 调用的监听器,您将出现内存泄漏!

您可以通过多种方式解决它:

  1. 不要将监听器设为匿名(“ios block ”),而是将 Activity 设为弱引用的内部静态类
  2. 将 WeakReference 封装在您的 API 中并在那里管理您的监听器。

关于java - 如何从java接口(interface)/类似的using block 返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32608683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com