3

私は今夜​​中これに対する解決策を見つけようとしています...

Webサーバーにデータを要求するアプリを作成します。サーバーはJSON形式で応答します。アプリにäのようなumlautを入力する場合を除いて、すべてがうまく機能します。

以下では、リクエストURLがhttp://example.com/?q=であると想定し、「Jäger」を検索しています。

その場合、正しい呼び出しはh ++ p://example.com/?q = J%C3%A4gerになります(プラス記号は申し訳ありませんが、スパム保護では正しく投稿できません)。

だから私の問題は今です:

URL文字列をエンコードまたはエンコード解除してHttpGetに渡すと、常に二重エンコードされたURLになります。

サーバーへのリクエストはhttp://example.com/?q=J%25C3%25A4ger(パーセント記号をエンコードします)であり、サーバーはデータベースでJ%C3%A4gerを検索します。これは明らかに間違っています。

だから私の質問は、ユーザーが「イェーガー」と入力した場合、私のアプリが正しくエンコードされたURLを呼び出すことをどのように達成できるかということです。

助けてくれてありがとう!

これが現在使用されているコードです...おそらく私が持っていた最悪のアイデアです...

URI url = new URI("http", "//example.com/?q=" + ((EditText)findViewById(R.id.input)).getText().toString(), null);
Log.v("MyLogTag", "API Request: " +  url);
HttpGet httpGetRequest = new HttpGet(url);

// Execute the request in the client
HttpResponse httpResponse;
httpResponse = defaultClient.execute(httpGetRequest);
4

1 に答える 1

0

更新:申し訳ありませんが、HttpParamsリクエストパラメータではなく、設定 HttpClient用です。

Androidでは、この他のSOの回答Uri.Builderで提案されているように、を使用することをお勧めします。

Uri uri = new Uri.Builder()
    .scheme("http")
    .authority("example.com")
    .path("someservlet")
    .appendQueryParameter("param1", foo)
    .appendQueryParameter("param2", bar)
    .build();

HttpGet request = new HttpGet(uri.toString());

// This looks very tempting but does NOT set request parameters
// but just HttpClient configuration parameters:
// HttpParams params = new BasicHttpParams();
// params.setParameter("q", query);
// request.setParams(params);

HttpResponse response = defaultClient.execute(request);
String json = EntityUtils.toString(response.getEntity());

Android以外では、クエリ文字列を手動で作成するか(すべてのエンコードの手間をかけて)、Androidに似たものを見つけるのが最善の策Uri.Builderです。


于 2012-04-18T23:12:06.553 に答える