我正在使用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";我希望我的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(),但它更多的是一种猜测。为什么它不是作为值传递,而是作为引用传递?
谢谢你,Z
发布于 2012-11-23 05:29:27
您应该使用artnr[0] (这是您传递的唯一参数)而不是artnr (因为String... artnr是String对象的数组,而不是单个String对象):
String url = "http://mobil.systembolaget.se/SokDryck/SokDryck.aspx?artnr="+ artnr[0] + "&lan=01";发布于 2012-11-23 05:29:59
String... artnr是一个var-args,实际上只是一个数组。当您打印artnr时,您打印的是数组引用的值。
您需要将您的url字符串更改为打印artnr[0]而不是artnr来打印字符串:-
String url = "http://mobil.systembolaget.se/SokDryck/SokDryck.aspx?artnr=" +
artnr[0] + "&lan=01";https://stackoverflow.com/questions/13520190
复制相似问题