16

このコードをオンラインで見つけましたが、理解できない部分が 1 つあります。メソッド 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...
    }
}
4

3 に答える 3

21

3 つのドットは のままですvargars。のようにアクセスできますString[]

メソッドが varargs をパラメーターとして受け取る場合、vargars 型の複数の値を指定してメソッドを呼び出すことができます。

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

あなたはのように呼び出すことができますmyMethod("a", "b");

myMethodvalues[0]では、「a」とvalues[1]等しく、「b」と等しくなります。複数の引数を持つメソッドがある場合、vargars 引数は最後でなければなりません: たとえば:

public void myMethod(int first, double second, String... values) {}
于 2013-06-29T16:59:34.690 に答える
11
 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

于 2013-06-29T17:01:47.303 に答える
7

javadocsから:

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

最後のパラメーターの型の後の 3 つのピリオドは、最後の引数が配列または一連の引数として渡される可能性があることを示します。可変引数は、最後の引数の位置でのみ使用できます。

于 2013-06-29T17:04:36.990 に答える