본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] Uri.getQueryParameter 에 # 들어가면 제대로 파싱 못합니다.

by 돼지왕 왕돼지 2017. 5. 15.
반응형


 [android] Uri.getQueryParameter 에 # 들어가면 제대로 파싱 못합니다.


#, /, ?, Android, contentprovider, getqueryparameter, google framwork source, parameter, parsepath, Path, scheme, URI, Value, [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 를 넘길 때 주의하자.





반응형

댓글