【问题标题】:How do I change (String ...params) argument list in doInBackground asyncTask in android?如何在 android 的 doInBackground asyncTask 中更改 (String ...params) 参数列表?
【发布时间】:2015-04-04 17:57:51
【问题描述】:

默认情况下,来自 asyncTask 的 api 的签名是 doInBackground(Param ...params)

在我的应用中,我有这个签名:

public String doInBackground(String ...params) 

我试过了,改成这样:

public String doInBackground(String param, int x) 

但它给了我错误:

类DataTasker必须声明为抽象或实现抽象方法'doInBackground(Params...params)

我知道这 3 个点是一个数组,我可以像访问它一样访问它

参数[0],参数[1]。

但仍然很困惑,在我的主要活动类中,我想将这些数据传递给后台任务:一个字符串,一个整数

DataTasker data = new DataTasker() ;
data.execute("mister x " , 56) ;

但显然,我必须只传递一个参数

【问题讨论】:

  • 为什么不将参数传递为:new DataTasker("mister x", 56)?
  • @ZiadHalabi,我这样做给了我错误

标签: android android-asynctask params params-keyword


【解决方案1】:

您可以做的一件事是创建 AsyncTask 的扩展,其中 doInBackground 所需的参数是一个对象。像这样的:

 private class DataTasker extends AsyncTask<Object, Void, String>

这样您就可以在doInBackground 方法中进行参数转换。

【讨论】:

    【解决方案2】:

    但显然,我必须只传递一个参数

    不,您可以随意通过。它们都必须是相同的基本类型。

    一些选项:

    1. 将类型声明为Object。这将需要大量演员表。

    2. 将类型声明为String,传入intString 表示,稍后再将其转换回来。

    3. 通过DataTasker 构造函数传递一个或另一个参数。

    4. 通过DataTasker 上的设置器传递一个或另一个参数。

    【讨论】:

      【解决方案3】:

      你可以试试,

      将整数转换为字符串并通过“mister x”传递

      DataTasker data = new DataTasker() ;
      data.execute("mister x " , String.valueOf(56)) ;
      

      您可以将这两个值作为参数访问,并将第二个参数再次转换为整数

      @Override
      protected JSONObject doInBackground(String... params) {
      
          String user=params[0];
          int value = Integer.parseInt(params[1]);
      }
      

      【讨论】:

        【解决方案4】:

        我相信您可以使用 Object 而不是 String,然后它看起来像 public String doInBackground(Object ...params)。而且您还必须将 params[0] 、 params[1] 转换为您需要的类型。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-30
          • 1970-01-01
          • 1970-01-01
          • 2018-01-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多