1

私は基本的List<NameValuePair>に、Android アプリで POST HTTPRequest を処理する外部クラスに a を渡そうとしています。

String[] args = new String[]{"http://url/login", nameValuePairs.toString()}; //nameValuePairs is a param list to send via POST
        Log.i("params", nameValuePairs.toString());
        try {
            String text = new rest().execute(args).get();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ExecutionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

ASyncTask の doInBackgroud は 2 つのパラメーター (要求の URL と nameValuePairs.toString() の結果) を受け取りますが、文字列を List< NameValuePair > に変換する方法が見つかりません。

何か案は?

4

3 に答える 3

1

たとえば、既知の形式を分解するようなコンバーターを作成しnvp[0].name=xxx, nvp[0].value=zzzたり、デフォルトの toString 出力を再構築したりしない限り、それはできません (楽しくありません)。

通常は、の代わりに JSON、XML などを使用しますList.toString

または、実際の HTTP クライアント ライブラリを使用します。

于 2013-04-16T22:29:51.740 に答える
1

次のようなコードを実行すると:

import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;

....

List<NameValuePair> h = new ArrayList<NameValuePair>();
h.add(new BasicNameValuePair("a", "b"));
h.add(new BasicNameValuePair("c", "d"));

Log.d("jj", h.toString());

出力が次のようになっていることがわかります。 [a=b, c=d]

そのため、パーサーを作成して (または を使用してsplit()) リストを復元できます。ただし、Dave が言ったように、ArrayList と NameValuePair の toString の実装に依存し、JSON のような別の種類のシリアル化方法を使用するのは良い考えではないと思います。

于 2013-04-16T22:44:12.373 に答える