2016-11-03 4 views
2

У меня есть проблема в получении параметров из URL, указанных ниже,Как получить значения параметров из URL

String url = http://example.com/api_callback#access_token=XXXXXXXXXXXXXXX&state=enabled&scope=profile%20booking&token_type=bearer&expires_in=15551999

Мой код для извлечения параметров выглядит следующим образом:

Uri uri = Uri.parseurl(url); 
Set<String> paramNames = uri.getQueryParameterNames(); 

Однако, как вы видите «#» в URL вместо «?» поэтому я не могу получить параметры Set.

Первое, что пришло мне в голову, это заменить «#» на «?» используя метод String.replace, тогда я думал, что это может быть лучшим решением для этого. Поэтому, если у вас есть лучшее решение, пожалуйста, помогите мне.

ответ

2

'#' называется параметром refrence. Здесь вы можете сделать одну из двух вещей, либо заменив '#' на '?' и обрабатывать URI т.е.

String url = "http://example.com/api_callback#access_token=XXXXXXXXXXXXXXX&state=enabled&scope=profile%20booking&token_type=bearer&expires_in=15551999"; 
url = url.Replace("#","?"); //now your URI object to proceed further 

или другой альтернативы

String url = "http://example.com/api_callback#access_token=XXXXXXXXXXXXXXX&state=enabled&scope=profile%20booking&token_type=bearer&expires_in=15551999"; 
URL myurl = new URL(url); 
String refrence = myurl.getRef(); //returns whatever after '#' 
String[][] params = GetParameters(refrence); 

и Defination для функции GetParameters() имеет следующий

private String[][] GetParameters(String r) 
{ 
    try 
    { 
     String[] p = r.split("&"); //separate parameters mixed with values 
     String[][] data = new String[p.length][2]; 
     for(int i = 0 ; i<p.length; i++) //iterate whole array 
     { 
      data[i][0] = p[i].split("=")[0]; //parameter name 
      data[i][1] = p[i].split("=")[1]; //parameter value 
      data[i][1] = data[i][1].replace("%"," "); //replace % with space character 
     } 
     return data; //return result 
    } 
    catch(Exception e) 
    { 
     return null; 
    } 
} 

я не выполнили и тестирование кода я ленюсь один тоже, поэтому я надеюсь, что вы разместите lolz: D

+0

Ваше второе решение дает 'access_token = XXXXXXXXXXXXXXX & состояние = включено & сфера = Профиль% 20booking & token_type = носителем & expires_in = 155519991' результат. Как получить значения параметров? –

+0

см. Мое отредактированное решение, оно решает вашу проблему –

0

Вы можете использовать класс Uri в An дроид, чтобы сделать это; https://developer.android.com/reference/android/net/Uri.html

Uri uri = Uri.parse("http://www.chalklit.in/post.html?chapter=V-Maths-Addition%20&%20Subtraction&post=394"); 
//Then you can even get a specific element from the query parameters as such; 
String chapter = uri.getQueryParameter("chapter"); //will return "V-Maths-Addition " 

 Смежные вопросы

  • Нет связанных вопросов^_^