AsyncTask Params Object参数

时间:2017-04-15 06:23:11

标签: android android-asynctask

我知道如何处理asynctask但我现在有一些疑问。请检查下面的aysnctask代码

 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如何给我一个结果。请解释一下是否有人知道。

提前致谢

2 个答案:

答案 0 :(得分:0)

如你所知,对象是java中的超类,所以在获取params [0]之后的doinBackgroung中你应该在获取该值之后键入cast,如下所示

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

答案 1 :(得分:0)

每次将参数传递给doInBackground时,编译器都会将其转换为对象类型。每个基本类型int,float,bool ...都有对象类型模拟Integer,Float,Boolean ...在这种情况下,编译器会首先将它强制转换为对象类型类似物,因此稍后会安全地转换为Object类型。对象类型是所有对象类型的超类(它是类层次结构的根),它具有.toString()函数,但.toString在子类中是覆盖(Integer,Float ...)。并根据继承规则调用子函数。所以integer,float ...将正确转换为字符串并在Log中打印。