如何更改android中doInBackground asyncTask中的(String..params)参数列表



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

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

public String doInBackground(String ...params) 

我试过了,改成了这个:

public String doInBackground(String param, int x) 

但它给了我一个错误:

类DataTasker必须声明为抽象或实现抽象方法"doInBackground(Params…Params)

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

params[0],params[1]。

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

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

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

您可以做的一件事是创建AsyncTask的扩展,其中doInBackground所需的参数是Object。类似这样的东西:

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

通过这种方式,您可以在doInBackground方法中进行参数转换。

但显然,我必须只通过一个论点

不,你想通过多少就通过多少。它们都必须是相同的基本类型。

一些选项:

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

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

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

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

你可以试试,

将整数转换为字符串,并将其传递给"mister x"

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新