0

私はAsyncTaskを使用して、私が行っている小さな学習プロジェクトのWebサイトから情報を取得しています。私は自分のコードを試しましたが、小さな問題がありますが、意図したとおりに「試行」します。

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

(単一のStringオブジェクトではなくStringオブジェクトの配列であるため)の代わりに(artnr[0]渡す唯一のパラメーター)を使用する必要があります。artnrString... artnr

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

それとは別に、Javaがオブジェクトを引数として値で渡す方法を参照してください

于 2012-11-22T21:29:26.643 に答える
1

String... artnrは、var-argsであり、実際には配列のみです。を出力するartnrと、配列参照の値が出力されます。

文字列を印刷するのではなく、印刷するようにurl文字列を変更する必要があります。-artnr[0]artnr

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