有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

AsyncTask中执行参数的java类型安全替代方案

有两种方法可以将参数传递给AsyncTask

  1. 定义第一个泛型参数并使用此类型的列表/数组,并通过execute()传递它
  2. 通过构造函数传递所有必要的参数,将它们存储在字段中,并在execute中访问它们

我发现第一种方法更具可读性,但有时它在类型安全方面缺乏灵活性,例如,如果要传递字符串、整数和布尔值,似乎不清楚如何处理

public Result doInBackground(String... params) {
   String param1 = params[0];
   int param2 = Integer.valueOf(params[1]);
   boolean param3 = Boolean.valueOf(params[2]);
   // ...
}

字符串解析,把它放在Bundle中,等等。总有一个解决方案,但从语义/方法签名的角度来看,我发现这令人不快。还有别的选择吗


共 (2) 个答案

  1. # 1 楼答案

    例如,为什么不创建一个类持有者呢

    static Class Holder {
      int i;
      String s;
      boolean b;
    }
    
    public Result doInBackground(Holder... params) {
       Holder holder = params[0];
       String holder.s;
      // ...
     }
    

    然后通过execute()将其发送到doBackground()。。 当我想发送到web时,我做了很多次

    这只是克劳斯的一个例子。 希望能有帮助

  2. # 2 楼答案

    您可以使用Loaders

    它一开始可能会很麻烦,但那时不会有任何类型安全问题,因为它的工作方式完全不同

    加载程序的主要功能是与绑定到活动/片段生命周期的管理器一起工作