1

by default from api for asyncTask the signature for it is doInBackground(Param ...params)

in my app I have this signature:

public String doInBackground(String ...params) 

I tried and changed to this:

public String doInBackground(String param, int x) 

but it gives me error:

class DataTasker must be declared abstract or implement abstract method 'doInBackground(Params...params)

I know this 3 dots is an array and i can access it like

params[0] , params[1].

But still confused, in my main activity class I want to pass this data for background task: a string , an integer

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

But apparently, i must pass only one argument

4

4 回答 4

4

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

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

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

于 2015-04-04T18:05:07.203 回答
3

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

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

一些选项:

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

  2. 将类型声明为String,传入String您的 表示int,然后再将其转换回来。

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

  4. 通过您的DataTasker.

于 2015-04-04T18:04:21.090 回答
2

你可以试试 ,

将整数转换为字符串并通过“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]);
}
于 2015-04-04T18:03:03.620 回答
1

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

于 2015-04-04T18:03:43.097 回答