0

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

我将一个字符串作为参数传递给在 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";

我希望我的字符串 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(),但这更像是一个猜测。为什么它不是作为值传递,而是作为引用传递?

谢谢你,Z

4

2 回答 2

4

You should use artnr[0] (which is the only parameter you are passing) instead of artnr (since String... artnr is an array of String objects not a single String object):

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

Aside to that, see How Java passes objects as arguments by value

于 2012-11-22T21:29:26.643 回答
1

String... artnr is a var-args, and is actually an array only. When you print artnr, you are printing value of your array reference.

You need to change your url string to print artnr[0] instead of artnr to print the string: -

String url = "http://mobil.systembolaget.se/SokDryck/SokDryck.aspx?artnr=" + 
             artnr[0] + "&lan=01";
于 2012-11-22T21:29:58.610 回答