参数通过引用而不是值传递

时间:2012-11-22 21:26:31

标签: java android parameters

我正在使用AsyncTask从网站上获取我正在做的小型学习项目的信息。我已经尝试了我的代码,它“尝试”做我想做的事情,虽然我有一个小问题。

我传递一个String作为参数在AsyncTask中执行,但参数是由地址而不是值引用的。为什么这样,以及如何在UI线程和后台线程之间正确传递参数?

这是我传递参数的代码:

ibSearch.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Editable artnrInput = input.getText();
            String artnr = artnrInput.toString();
            new Connection().execute(artnr);
        }
    });

到目前为止我调试了它,参数“artnr”在这里是一个值。

这是发生错误的AsyncTask的一部分:

public class Connection extends AsyncTask<String, String, String>{

    @Override
    protected String doInBackground(String... artnr)  {
        String url = "http://mobil.systembolaget.se/SokDryck/SokDryck.aspx?artnr="+ artnr + "&lan=01";

我希望我的String url看起来像是这样的例子: http://mobil.systembolaget.se/SokDryck/SokDryck.aspx?artnr=221101&lan=01

当我调试它时它的功能是什么,使它不起作用是这样的:

 http://mobil.systembolaget.se/SokDryck/SokDryck.aspx?artnr=[Ljava.lang.String;@43e4c9f8&lan=01

我尝试过一个简单的toString(),但这更像是一个猜测。为什么它不作为值传递,而是作为参考传递?

谢谢你, ž

2 个答案:

答案 0 :(得分:4)

您应该使用artnr[0](这是您传递的唯一参数)而不是artnr(因为String... artnr是String对象的数组而不是单个String对象):

String url = "http://mobil.systembolaget.se/SokDryck/SokDryck.aspx?artnr="+ artnr[0] + "&lan=01";

除此之外,请参阅How Java passes objects as arguments by value

答案 1 :(得分:1)

String... artnrvar-args,实际上只是一个数组。当您打印artnr时,您将打印数组引用的值。

您需要更改url字符串以打印artnr[0]而不是artnr来打印字符串: -

String url = "http://mobil.systembolaget.se/SokDryck/SokDryck.aspx?artnr=" + 
             artnr[0] + "&lan=01";