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

时间:2015-04-04 17:57:51

标签: android android-asynctask params params-keyword

默认情况下从api for asyncTask签名是doInBackground(Param ... params)

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

public String doInBackground(String ...params) 

我试过并改为:

public String doInBackground(String param, int x) 

但它给了我错误:

  

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

我知道这3个点是一个数组,我可以像

一样访问它

params [0],params [1]。

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

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

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

4 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:3)

  

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

不,你可以随心所欲地传球。它们都必须是相同的基本类型。

一些选项:

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

  2. 将类型声明为String,传入String的{​​{1}}表示形式,稍后再将其转换回来。

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

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

答案 2 :(得分:2)

你可以尝试,

将整数转换为String并将其传递给&#34;先生x&#34;

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

答案 3 :(得分:1)

我相信你可以使用Object代替String,然后它会看起来像public String doInBackground(Object ...params)。你还必须使用params [0],params [1]来输入你需要的类型。