尝试为HTTPGET构建URI时出现奇怪的结果

时间:2013-08-09 20:43:28

标签: android hashmap uri http-get

我正在尝试通过向URL添加一些参数来构建BASEURL: 问题是参数被添加到我的BASEURL无序状态,而é的字符被%C3%A9

等奇怪的内容所取代
String BASEURI="myBaseUri";
void getParameters()
{
    HashMap<String, String> map=new HashMap<String, String>();              
   final String login = ((EditText)alertDialogRegister.findViewById(R.id.regLogin)).getText().toString();
   final String password= ((EditText)alertDialogRegister.findViewById(R.id.regPassword)).getText().toString();
   final String passwordConfirm= ((EditText)alertDialogRegister.findViewById(R.id.regPasswordConfirm)).getText().toString();
   final String firstName= ((EditText)alertDialogRegister.findViewById(R.id.regPrenom)).getText().toString();
   final String lastName= ((EditText)alertDialogRegister.findViewById(R.id.regNom)).getText().toString();
       final String sexe=((RadioButton)alertDialogRegister.findViewById(((RadioGroup)alertDialogRegister.findViewById(R.id.regSexe)).getCheckedRadioButtonId())).getText().toString();
   final String email= ((EditText)alertDialogRegister.findViewById(R.id.regEmail)).getText().toString();
   final String telephone= ((EditText)alertDialogRegister.findViewById(R.id.regPhone)).getText().toString();
   final String adresse= ((EditText)alertDialogRegister.findViewById(R.id.regAddress)).getText().toString();
   final String civilite=((RadioButton)alertDialogRegister.findViewById(((RadioGroup)alertDialogRegister.findViewById(R.id.regCivilite)).getCheckedRadioButtonId())).getText().toString();
    map.put("rquest","addUser");
    map.put("login", login);
    map.put("password", password);
    map.put("firstname", firstName);
    map.put("lastname", lastName);
    map.put("sex", sexe);
    map.put("situation", civilite);
    map.put("email", email);
    map.put("address", adresse);
    registeruser(map);

}

 public void registeruser(HashMap<String,String> map)
    {  
        Uri.Builder builder = Uri.parse(BASEURI).buildUpon();
        builder.appendPath("api.php");
        for(Map.Entry<String, String> entry:map.entrySet())
        {
        builder.appendQueryParameter(entry.getKey(),entry.getValue());
        }
        Uri builtUri = builder.build();
        Log.i("Hossam", builtUri.toString());
        HttpClient httpclient = new DefaultHttpClient();  
        HttpGet request = new HttpGet(builder.toString());  

        ResponseHandler<String> handler = new BasicResponseHandler();  
        String result = null;
        try {  
            result = httpclient.execute(request, handler);  
        } catch (ClientProtocolException e) {  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
        httpclient.getConnectionManager().shutdown();  
        String tag = null;
        //Log.i("http response", result);  
    }

2 个答案:

答案 0 :(得分:1)

您的角色é不属于ASCII字符集。

网址只能包含ASCII字符集。 由于URL通常包含ASCII集之外的字符,因此必须将URL转换为有效的ASCII格式。

URL编码用“%”后跟两个十六进制数字替换不安全的ASCII字符。 网址不能包含空格。 URL编码通常用+号替换空格。

来源:w3schools

答案 1 :(得分:1)

订单问题,是因为您正在使用Map,而在Java Maps中是无序和未排序类型的集合,除非您使用LinkedHashMap或TreeMap,其性能比常规List更高,如果您需要特定订单必须转到List,否则Map将始终以无序方式返回值,并且与特殊字符相关的是因为您的URL包含它们,并且默认情况下URL被转换为它们的编码版本,因为它们只能是ASCII,这是URL编码字符的列表... http://www.degraeve.com/reference/urlencoding.php