我知道如何处理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如何给我一个结果。请解释一下是否有人知道。
提前致谢
答案 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中打印。