4

エラーが発生します:

W/System.err(32720): java.lang.IllegalArgumentException: Illegal character in query at index 89: https://api.mongolab.com/api/1/databases/activity_recognition/collections/entropy_data?f={%20mean0%22:%201}&apiKey=myApiKey


String apiURI = "https://api.mongolab.com/api/1/databases/activity_recognition/collections/entropy_data?f={%22mean0%22:%201}&apiKey=myApiKey";
  • この URI をブラウザに貼り付けると、正常に動作します。
  • ブラウザーに貼り付けて開き、URI をコードにコピーしても役に立ちません。
  • インデックス 89 は { - なぜ不正な文字なのですか?

私はこれをやってみました - 中括弧を %7B に置き換えます: しかし、それは役に立ちません

https://api.mongolab.com/api/1/databases/activity_recognition/collections/entropy_data?f=%7B"mean0":%201%7D&apiKey=myApiKey

誰?


編集:

    String query = "https://api.mongolab.com/api/1/databases/activity_recognition/collections/entropy_data?f={\""+arrayName+"\":%201}&apiKey=myApiKey";
    try {
        query = URLEncoder.encode(query, "utf-8");
    } catch (UnsupportedEncodingException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    String apiURI = query;

助けにならない。今私は得ています:

05-23 22:13:21.855: E/SendMail(12428): Target host must not be null, or set in parameters. scheme=null, host=null, path=https://api.mongolab.com/api/1/databases/activity_recognition/collections/entropy_data?f={"mean0":%201}&apiKey=myAPI

クエリの宣言で %20 をスペースに変更すると、次のようになります。

 05-23 22:14:51.435: E/SendMail(13164): Target host must not be null, or set in parameters. scheme=null, host=null, path=https://api.mongolab.com/api/1/databases/activity_recognition/collections/entropy_data?f={"mean0":+1}&apiKey=myAPI

また、途中でarrayName文字列を使用せず、ブラウザから直接文字列を使用しても、効果は同じです!

4

3 に答える 3

5

私が見てきたことから、すべての試みは何かを見逃すか、「?」などのエンコードしてはならないものをエンコードするか、何かを二重エンコードして、URL エンコーディングで「%」を URL エンコードします。

エスケープしたいビットをエンコードして、それを一度だけ実行するのはどうですか?

String apiURI =
    "https://api.mongolab.com/api/1/databases/activity_recognition/collections/entropy_data?f="
    + URLEncoder.encode("{\"mean0\": 1}", "UTF-8")
    + "&apiKey=myApiKey";

java.net.URI を使用する場合は、クエリ文字列を個別に含める必要があります。たとえば、次のようになります。

new URI(
    "https",
    "api.mongolab.com",
    "/api/1/databases/activity_recognition/collections/entropy_data",
    "f={\"mean0\": 1}&apiKey=myApiKey",
    null
  ).toURL()
于 2013-05-23T22:40:54.917 に答える
-1

これを行う別の方法は次のとおりです。

uri = new URI("https", 
"api.mongolab.com", 
"/api/1/databases/activity_recognition/collections/entropy_data?f={\"mean\": 1}&apiKey=myApiKey", null);
URL url = uri.toURL();

%22 (urlencoded 引用符) を \" (エスケープされた引用符) に変更したことに注意してください。

明確にするために、これのポイントは、これを行う場合:

String query = "https://api.mongolab.com...";
query = URLEncoder.encode(query, "utf-8");

https%3A%2F%2Fapi.mongolab.com になります。

于 2013-05-23T21:24:28.183 に答える
-2

私はあなたがこのようなものを探していると思います

String flag1 = URLEncoder.encode("This string has spaces", "UTF-8");

Oracle URL Encoderのドキュメントを参照するか、SOFを参照してください。

于 2013-05-23T21:11:54.890 に答える