我正在尝试通过向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);
}
答案 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