我正在使用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(),但这更像是一个猜测。为什么它不作为值传递,而是作为参考传递?
谢谢你, ž
答案 0 :(得分:4)
您应该使用artnr[0]
(这是您传递的唯一参数)而不是artnr
(因为String... artnr
是String对象的数组而不是单个String对象):
String url = "http://mobil.systembolaget.se/SokDryck/SokDryck.aspx?artnr="+ artnr[0] + "&lan=01";
答案 1 :(得分:1)
String... artnr
是var-args
,实际上只是一个数组。当您打印artnr
时,您将打印数组引用的值。
您需要更改url
字符串以打印artnr[0]
而不是artnr
来打印字符串: -
String url = "http://mobil.systembolaget.se/SokDryck/SokDryck.aspx?artnr=" +
artnr[0] + "&lan=01";