回调问题:无法从具有无效结果类型的方法中返回值

时间:2019-09-02 10:01:14

标签: java android

我想返回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
        }
    });

}

1 个答案:

答案 0 :(得分:0)

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

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);
}