0

我正在尝试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);  
    }
4

2 回答 2

1

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

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

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

资料来源:w3schools

于 2013-08-09T20:48:26.100 回答
1

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

于 2013-08-09T20:49:36.710 回答