【问题标题】:What does "String... params" mean if passed as a parameter? [duplicate]如果作为参数传递,“String ... params”是什么意思? [复制]
【发布时间】:2013-06-27 06:46:42
【问题描述】:

我在网上找到了这段代码,其中有一部分我不明白。对于doInBackground方法,传递的参数是String... params。有人可以向我解释一下这是什么意思吗?那是什么...

public class AsyncHttpPost extends AsyncTask<String, String, String> {
    private HashMap<String, String> mData = null;// post data

    /**
     * constructor
     */
    public AsyncHttpPost(HashMap<String, String> data) {
        mData = data;
    }

    /**
     * background
     */
    @Override
    protected String doInBackground(String... params) {
        byte[] result = null;
        String str = "";
        HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost(params[0]);// in this case, params[0] is URL
        try {
            // set up post data
            ArrayList<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();
            Iterator<String> it = mData.keySet().iterator();
            while (it.hasNext()) {
                String key = it.next();
                nameValuePair.add(new BasicNameValuePair(key, mData.get(key)));
            }

            post.setEntity(new UrlEncodedFormEntity(nameValuePair, "UTF-8"));
            HttpResponse response = client.execute(post);
            StatusLine statusLine = response.getStatusLine();
            if(statusLine.getStatusCode() == HttpURLConnection.HTTP_OK){
                result = EntityUtils.toByteArray(response.getEntity());
                str = new String(result, "UTF-8");
            }
        }
        catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        catch (Exception e) {
        }
        return str;
    }

    /**
     * on getting result
     */
    @Override
    protected void onPostExecute(String result) {
        // something...
    }
}

【问题讨论】:

  • 你没有看到它在哪里使用?它首先用在方法的第四行。
  • params 是一个变量名

标签: java android


【解决方案1】:

来自javadocs

public static String format(String pattern,
                                Object... arguments);

最后一个参数的类型后面的三个句点表示 final 参数可以作为数组或序列传递 论据。 Varargs 只能用于最后的参数位置。

【讨论】:

    【解决方案2】:
     doInBackground(String... params)
     // params represents a vararg.
     new AsyncHttpPost().execute(s1,s2,s3); // pass strings to doInbackground
     params[0] is the first string
     params[1]  is the second string 
     params[2]  is the third string 
    

    http://developer.android.com/reference/android/os/AsyncTask.html#doInBackground(Params...)

    异步任务的参数传给doInBackground

    【讨论】:

      【解决方案3】:

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

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

      public void myMethod(String... values) {}
      

      你可以打电话给myMethod("a", "b");

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

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

      【讨论】:

      • 谢谢,真的帮了大忙!
      猜你喜欢
      • 1970-01-01
      • 2012-11-10
      • 2013-07-15
      • 2011-07-03
      • 2013-07-13
      • 2018-12-24
      • 2013-12-23
      • 2012-09-08
      相关资源
      最近更新 更多