AddressBuilderQuery queryLiteral ( String query ) { if ( query != null ) { if ( query . startsWith ( "?" ) ) query = query . substring ( 1 ) ; /* * Linked hash map is important here in order to retain the order of query parameters. */ Map < CharSequence , List < CharSequence > > params = new LinkedHashMap < CharSequence , List < CharSequence > > ( ) ; query = decodeHTMLAmpersands ( query ) ; int index = 0 ; while ( ( index = query . indexOf ( ' ' ) ) >= 0 || ! query . isEmpty ( ) ) { String pair = query ; if ( index >= 0 ) { pair = query . substring ( 0 , index ) ; query = query . substring ( index ) ; if ( ! query . isEmpty ( ) ) query = query . substring ( 1 ) ; } else query = "" ; String name ; String value ; int pos = pair . indexOf ( ' ' ) ; // for "n=", the value is "", for "n", the value is null if ( pos == - 1 ) { name = pair ; value = null ; } else { name = pair . substring ( 0 , pos ) ; value = pair . substring ( pos + 1 , pair . length ( ) ) ; } List < CharSequence > list = params . get ( name ) ; if ( list == null ) { list = new ArrayList < CharSequence > ( ) ; params . put ( name , list ) ; } list . add ( value ) ; } for ( Entry < CharSequence , List < CharSequence > > entry : params . entrySet ( ) ) { query ( entry . getKey ( ) , entry . getValue ( ) . toArray ( ) ) ; } } return new AddressBuilderQuery ( this ) ; }
Set a literal query string without additional encoding or decoding . A leading ? character is optional ; the builder will add one if necessary .