[android] Uri.getQueryParameter 에 # 들어가면 제대로 파싱 못합니다. |
#
안쪽 소스를 들여다보면 어떻게 작동하는지 알 수 있다.
#
<Google Framework Source>
static String parsePath(String uriString, int ssi) {
int length = uriString.length();
// Find start of path.
int pathStart;
if (length > ssi + 2
&& uriString.charAt(ssi + 1) == '/'
&& uriString.charAt(ssi + 2) == '/') {
// Skip over authority to path.
pathStart = ssi + 3;
LOOP: while (pathStart < length) {
switch (uriString.charAt(pathStart)) {
case '?': // Start of query
case '#': // Start of fragment
return ""; // Empty path.
case '/': // Start of path!
break LOOP;
}
pathStart++;
}
} else {
// Path starts immediately after scheme separator.
pathStart = ssi + 1;
}
// Find end of path.
int pathEnd = pathStart;
LOOP: while (pathEnd < length) {
switch (uriString.charAt(pathEnd)) {
case '?': // Start of query
case '#': // Start of fragment
break LOOP;
}
pathEnd++;
}
return uriString.substring(pathStart, pathEnd);
}
#
Path 는 scheme 이후의 / 부터 시작한다.
Path 의 끝은 ? 나 # 를 만나는 시점 혹은 마지막 문자열까지이다.
#
위의 규칙으로 보았을 때 getQueryParameter 를 통해 parameter 의 value를 가져올 때 value 에 # 나 ? 가 들어 있다면, 그 앞까지를 value 로 인식하고 잘라버린다.
content provider 호출할 때 parameter 를 넘길 때 주의하자.
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[Android] java.lang.IllegalStateException: Cannot add header view to list -- setAdapter has already been called. (0) | 2017.05.17 |
---|---|
[Java] Subclass 는 Serializable 을 구현하고, Superclass 는 그렇지 않은 경우. (0) | 2017.05.16 |
[Java] Condition 은 어떻게 쓰는걸까? 예를 통해 함 보자. (0) | 2017.05.12 |
[Java Concurrency] 목차 정리 (0) | 2017.05.11 |
[Java Concurrency] 자바 메모리 모델 (0) | 2017.05.10 |
댓글