首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >参数是通过引用而不是值传递的

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

Stack Overflow用户
提问于 2012-11-23 05:26:31
回答 2查看 103关注 0票数 0

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

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

下面是传递参数的代码:

代码语言:javascript
运行
复制
ibSearch.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Editable artnrInput = input.getText();
            String artnr = artnrInput.toString();
            new Connection().execute(artnr);
        }
    });

到目前为止我已经调试过了,参数"artnr“在这里是一个值。

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

代码语言:javascript
运行
复制
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

当我调试它时,它的作用是这样的:

代码语言:javascript
运行
复制
 http://mobil.systembolaget.se/SokDryck/SokDryck.aspx?artnr=[Ljava.lang.String;@43e4c9f8&lan=01

我已经尝试了一个简单的toString(),但它更多的是一种猜测。为什么它不是作为值传递,而是作为引用传递?

谢谢你,Z

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-23 05:29:27

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

代码语言:javascript
运行
复制
String url = "http://mobil.systembolaget.se/SokDryck/SokDryck.aspx?artnr="+ artnr[0] + "&lan=01";

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

票数 4
EN

Stack Overflow用户

发布于 2012-11-23 05:29:59

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

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

代码语言:javascript
运行
复制
String url = "http://mobil.systembolaget.se/SokDryck/SokDryck.aspx?artnr=" + 
             artnr[0] + "&lan=01";
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13520190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档