2017-04-15 58 views
-2

我知道如何處理asynctask,但我現在有些疑問。請檢查我的下面的aysnctask代碼AsyncTask Params對象參數

public class MyAsynTask extends AsyncTask<Object, Object, Object> { 

    @Override 
    protected Object doInBackground(Object... params) { 
     Log.d("Main params ", "" + params[0]); 
     return null; 
    } 

} 

代碼沒有問題,它正在運行。我的疑問是,當我在執行方法中使用不同的參數時,我正在得到結果。請參考下面的代碼

new MyAsynTask().execute("Welcome"); 
    new MyAsynTask().execute(10); 
    new MyAsynTask().execute(10.5f); 
    new MyAsynTask().execute(11.12d); 

這裏是傳遞不同類型的值,但我的doInBackground方法有對象類型參數。當我傳遞不同的值時doInBackground給了我一個結果。請解釋一下,如果有人知道。

在此先感謝

+1

什麼都傳遞作爲參數,asynctask將作爲對象。 你可以通過對象轉換將對象轉換爲任何類型的字母。 Like Int int =(Int)params [0]; –

回答

0

正如你所知道的對象是在Java中的超類,所以在doinBackgroung越來越PARAMS [0],你須得到像下面

//this is for string case 
String stringValue = params[0].toString(); 
+0

沒有類型轉換我可以得到doInBackground方法中的所有結果。例如:如果我通過atcutecute(2),我會在doInBackground中得到結果。我在doInBackground裏面寫了一個Log.d(「Main params」,「」+ params [0]);當我這樣做時,我得到了logcat中的結果2。所以我的疑問是整數2如何在doInBackground中傳遞和處理? –

+0

是的,當你在doinBackground中傳遞時,你會自動鍵入cast,以便它在printLog中顯示2 –

0

每次你該值後投後通過參數doInBackground編譯器將其轉換爲對象類型。每個基本類型int,float,bool ...都有對象類型analogue Integer,Float,Boolean ...在這種情況下,編譯器會首先將其轉換爲對象類型類似物,以便稍後將其安全地轉換爲Object類型。對象類型是所有對象類型的超類(它是類層次結構的根),它有.toString()函數,但.toString在子類(Integer,Float ...)中被覆蓋。並根據繼承規則調用子函數。所以整數,浮點數......將被正確地轉換爲字符串並在Log中打印。