0

URLmy にいくつかのパラメータを追加して を構築しようとしていますBASEURL: 問題は、パラメータがBASEURL無秩序に my に追加され、文字éが次のような奇妙なものに置き換えられることです%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

順序の問題は、マップを使用しているためです。Java マップでは、通常のリストよりもパフォーマンスが大幅に向上する LinkedHashMap または TreeMap を使用しない限り、Java マップは順序付けされておらず、並べ替えられていないタイプのコレクションです。特定の順序が必要な場合は、行く必要があります。リスト、それ以外の方法では、Map は常に順序付けされていない方法で値を返します。特殊文字に関連するのは、URL にそれらが含まれているためです。デフォルトでは、URL は ASCII のみであるため、エンコードされたバージョンに変換されます。 URLエンコードされた文字のリストです... http://www.degraeve.com/reference/urlencoding.php

于 2013-08-09T20:49:36.710 に答える
1

あなたの文字é は ASCII 文字セットに属していません。

URL には ASCII 文字セットのみを含めることができます。URL には ASCII セット以外の文字が含まれることが多いため、URL を有効な ASCII 形式に変換する必要があります。

URL エンコーディングは、安全でない ASCII 文字を「%」の後に 2 桁の 16 進数で置き換えます。URL にスペースを含めることはできません。URL エンコーディングでは通常、スペースが + 記号に置き換えられます。

出典: w3schools

于 2013-08-09T20:48:26.100 に答える