2015-04-04 55 views
0

通過API進行的AsyncTask默認爲它的簽名是doInBackground(帕拉姆... PARAMS)如何更改(String ... params)參數列表在android中的doInBackground asyncTask?

在我的應用程序

我有這樣的簽名:

public String doInBackground(String ...params) 

我嘗試和改變這一點:

public String doInBackground(String param, int x) 

,但它給我的錯誤:

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

我知道這3個點是一個數組,我可以訪問它像

params [0],params [1]。

但仍是一頭霧水,在我的主要活動課我想通過這個數據,後臺任務:一個字符串,整數

但很顯然,我必須通過只有一個參數

+0

爲什麼不傳遞參數爲:new DataTasker(「mister x」,56)? – 2015-04-04 18:02:49

+0

@ZiadHalabi,我做了它給了我錯誤 – ERJAN 2015-04-04 18:10:41

回答

2

你可以嘗試,

轉換整數爲字符串,並將其傳遞王氏的「老總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]); 
} 
+0

謝謝,這一個是最清晰,最容易理解.. – ERJAN 2015-04-04 18:10:11

+0

歡迎,如果它幫助你接受答案。 – 2015-04-04 18:10:53

1

我相信你可以使用對象,而不是字符串,然後將其iwll樣子public String doInBackground(Object ...params)。而且你還必須使用params [0],params [1]來需要你輸入類型。

3

But apparently, i must pass only one argument

不,您可以傳遞儘可能多的。它們都必須是相同的基本類型。

一些選項:

  1. 聲明類型爲Object。這將需要大量演員。

  2. 聲明類型爲String,傳遞intString表示形式,並稍後將其轉換回來。

  3. 通過DataTasker構造函數傳遞一個或另一個參數。

  4. 通過你的DataTasker上的一個setter傳遞一個或另一個參數。

3

你可以做的一件事是創建一個AsyncTask的擴展,其中doInBackground的所需參數是一個對象。事情是這樣的:

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

這樣你可以做你的參數doInBackground方法內鑄造。

相關問題