【问题标题】:Callback Problem: Can't return a value from a method with void result type [duplicate]回调问题:无法从具有 void 结果类型的方法返回值 [重复]
【发布时间】:2023-03-21 19:08:01
【问题描述】:

我想将List<Product>作为结果值返回而不阻塞,怎么做?

public static List<Product> getProducts(@NonNull Context context){

    ProductDataSource.getInstance(context).readProducts(new IProductDataSource.IReadProductsCallback() {
        @Override
        public void onSuccess(List<Product> result) {
            return result; // error in here
        }

        @Override
        public void onFailure() {
            return null;  // error in here
        }
    });

}

【问题讨论】:

标签: java android


【解决方案1】:

您需要为调用方法提供某种回调。例如:

interface Callback {
  void onProductsRetrieved(List<Product> products)
  void onProductsRetrieveError()
}

public static void getProducts(@NonNull Context context, Callback callback) {
  ProductDataSource
    .getInstance(context)
    .readProducts(new IProductDataSource.IReadProductsCallback() {
      @Override
      public void onSuccess(List<Product> result) {
        callback.onProductsRetrieved(result)
      }

      @Override
      public void onFailure() {
        callback.onProductsRetrieveError()
      }
    });
}

注意getProducts 的返回类型已更改为void,并添加了Callback 作为参数。

您也可以直接传递IProductDataSource.IReadProductsCallback

public static void getProducts(@NonNull Context context, IProductDataSource.IReadProductsCallback callback) {
  ProductDataSource.getInstance(context).readProducts(callback);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-23
    • 2013-03-09
    • 1970-01-01
    • 2014-04-16
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多