2017-04-15 1 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; 
    } 

} 

コードに問題はありません。実行中です。私の疑いは、私は結果を得ることを実行メソッドで別のパラメータを使用しているときです。 Plsは以下のコードを参照します

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

ここでは、さまざまなタイプの値を渡していますが、doInBackgroundメソッドにはオブジェクト型パラメータがあります。 doInBackgroundがどのように私に結果を与えるか異なる値を渡している間。 Plsは誰もが知っているかどうかを説明します。あなたは、オブジェクトがのparamsを取得した後doinBackgroungにしてJavaでのスーパークラスである知っているように、事前

+1

asynctaskは引数として渡されるものは何でもオブジェクトとして取得します。 文字をオブジェクトに変換すると、オブジェクトを任意の型に変換できます。 Like int =(Int)params [0]; –

答えて

0

おかげで[0]あなたが

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

型キャストなしdoInBackgroundメソッド内ですべての結果を取得できます。例:私がat.execute(2)を渡している場合、私はdoInBackgroundで結果を取得します。私はこのLog.d( "Main params"、 "+ params [0])のようなdoInBackgroundの内部にログを書きました。私がこれを行うと、logcatで結果2が得られます。だから私の疑問は、整数2が渡され、doInBackgroundでどのように処理されるかです。 –

+0

doinBackgroundで渡すときに自動的にキャストを入力すると、なぜprintLogで2を表示するのか –

0

ようにするたびに、その値を取得した後、キャストを入力する必要がありますdoInBackgroundコンパイラへのパラメータを渡すと、オブジェクト型にキャストされます。 int型、float型、bool型のすべてのオブジェクト型があります。Integer、Float、Boolean ...そして、この場合、コンパイラは最初にオブジェクト型の類似体にキャストしますので、後でObject型に安全にキャストできます。オブジェクト型はすべてのオブジェクト型(クラス階層のルート)のスーパークラスであり、.toString()関数を持ちますが、.toStringは子クラス(Integer、Float ...)でオーバーライドされます。継承ルールに従って、子関数が呼び出されます。 integer、float ...は文字列に正しく変換され、Logに出力されます。