@Override
public void onClick(View view) {
Context context = view.getContext();
switch(view.getId()) {
case R.id.getGreetingButton:
Pair <Context,Integer>p=new Pair(context,1);
new RestTask().execute(p);
break;
}
}
private class RestTask extends AsyncTask<Pair<Context,Integer>, Void, Pair<Context,String>> {
@Override
protected Pair doInBackground(Pair<Context,Integer>... p) {
String text = "hello";
Pair <Context,String>result=new Pair(p.first,text);
return result;
}
@Override
protected void onPostExecute(Pair<Context,String>... p) {toaster(p.first, p.second);}
}
1)你如何称呼...
这个东西,它做了什么?
2)为什么编译器找不到p.first和p.second?
3)你什么时候使用Pair.create(a,b)?
答案 0 :(得分:7)
1)请参阅http://docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html - 它实际上是你在这里传递的可变数量的对。
2)使用p [0] .first和p [0] .second,将参数视为数组。你可以在调用execute()时传递很多Pa,并且每个pa成为传递给doInBackground()的数组中的一个项目
3)你可以在调用execute()时使用它作为简写来避免创建局部变量p,并且在doInBackground中你可以返回Pair.create()而不是创建本地结果变量。类似的东西:
switch(view.getId()) {
case R.id.getGreetingButton:
new RestTask().execute(Pair.create(context,1));
break;
}