【问题标题】:What is the meaning X ... x in android AsynTask's parameter in androidandroid中的X ... x是什么意思 android中AsynTask的参数
【发布时间】:2017-08-22 03:34:24
【问题描述】:

请告诉我...在“doInBackground(X...x)”中是什么意思

我已经阅读了 Kartik Domadiya 在

上的出色回答

什么参数被传递到 AsyncTask 中?

这对我有很大帮助。但是,我仍然无法理解下面的 3 个点。我需要一些具体的例子。

private class MyTask extends AsyncTask<X, Y, Z>

protected void onPreExecute(){

}
 protected Z doInBackground(X...x){

}

protected void onProgressUpdate(Y y){
}

protected void onPostExecute(Z z){
}

如果我必须向 doInBackground() 传递多个参数,我是否只需将 X 替换为第一个参数的类型?

例如,如果我将三个参数传递给 doInBackground(),分别为 int、String、String 类型,并以 String 类型生成结果。在进度更新的过程中,我会使用一个String类型的参数,我会这样实现类吗?

private class MyTask extends AsyncTask<int, String, String> {
    protect void onPreExecute() {
    }
    protect String doInBackground(int ... x) {
    }
    protect void onProgressUpdate(String y) {
    }
    protect void onPostExecute(String z) {
    }

【问题讨论】:

标签: java android android-asynctask


【解决方案1】:

根据文档:

异步任务由在后台线程上运行的计算定义,其结果在 UI 线程上发布。异步任务由 3 种通用类型定义,称为 Params、Progress 和 Result。 这三种类型可以解释为:

异步任务使用的三种类型如下:

1.Params- 执行时发送给任务的参数类型。

2.Progress- 后台计算期间发布的进度单元的类型。

3.Result,后台计算结果的类型。

您可以获取更多详情here.

现在; X 通常是在执行时发送到任务的 URL。

现在; ...(点)表示可变参数数组,即可以将可变数量的相同类型的参数传递给方法并作为数组处理。

例如;

三个点停留在vargars。你可以像 String[] 一样访问它。

如果方法将可变参数作为参数,您可以使用可变参数类型的多个值调用它:

public void myMethod(String... values) {}
you can call like myMethod("a", "b");

在 myMethod 中,values[0] 等于“a”,values[1] 等于“b”。如果您有一个具有多个参数的方法,则 vargars 参数必须是最后一个:例如:

 public void myMethod(int first, double second, String... values) {}

【讨论】:

  • 我只是不明白 doInBackground(X...x) 中的 3 个点,你能告诉我……是什么意思吗?
  • 我觉得应该可以澄清你的疑惑
  • 非常感谢你。顺便说一句,如果我必须传递一个整数参数数组,我会用 Integer 替换 X 还是只替换 int?
  • 当然;你可以使用类似Integer ...x
  • 我现在明白,在您的帮助下,它退出了。可惜我现在只有6个声望,无法提升你的声望。再次感谢您。
【解决方案2】:

这意味着该方法的参数可以是零个或多个 Int 对象(或它们的数组)。

您可以在这里了解更多详情:

“任意数量的参数”部分http://java.sun.com/docs/books/tutorial/java/javaOO/arguments.html#varargs

所以你可以这样做

new MyTask().execute();
new MyTask().execute(1);
new MyTask().execute(1, 2, 3);

【讨论】:

  • 我正在使用 JavaScript 和 ruby​​ 进行编程,对 Java 并不熟悉。我会阅读 varargs 以获得更多详细信息,谢谢。
【解决方案3】:

这意味着您可以传递不确定数量的该类型参数。 它是X [] x 的简写。这意味着参数实际上是一个 X 数组。

例子:

public void doSomething(String ... stings){
  String [] str = strings;
  <process the stings>
}

其他地方:

doSomething("One","of","many","stirngs");

【讨论】:

  • 非常感谢,这意味着我可以传递相同类型的数据数组,对吧?但是如何传递不同类型的参数。我是否必须将这些参数包装到一个对象中?
  • 但是您将其作为逗号分隔的参数列表传递。
  • 编写函数时,会将参数读取为该类型的数组。
  • 我现在明白,在您的帮助下,它退出了。可惜我现在只有6个声望,无法提升你的声望。再次感谢您。
  • 如果这对您有帮助,您应该能够接受带有绿色勾号的答案:)。
猜你喜欢
  • 2020-03-18
  • 2021-08-02
  • 2015-03-24
  • 1970-01-01
  • 2015-12-30
  • 2020-10-02
  • 2011-05-27
  • 2018-05-03
  • 1970-01-01
相关资源
最近更新 更多