Je veux savoir quelle est l'utilisation de List<NameValuePair>
ou ArrayList<NameValuePair>
dans Android? Particulièrement lorsque nous utilisons des services Web en utilisant AsyncTask<...>
NameValuePair est une paire spéciale <Key, Value>
utilisée pour représenter les paramètres dans une requête http, à savoir www.example.com?key=value
.
NameValuePair est une interface définie dans le client HTTP Apache, largement utilisé en Java pour gérer les opérations http. Un List<NameValuePair>
est simplement une liste de paires <key, value>
et sera utilisé comme paramètre dans une requête de publication http.
HttpPost request = new HttpPost();
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("key", "value"));
request.setEntity(new UrlEncodedFormEntity(params));
httpClient.execute(request);
Quelques trucs utiles pour vous.
List
est une interface et ArrayList
est une implémentation de l'interface List
.
List
: List
est une interface dans la structure de collection. Plusieurs classes telles que ArrayList
, LinkedList
implémentent cette interface. List
est une collection ordonnée, la position d'un objet est donc importante.
ArrayList
: Une ArrayList
est une classe qui peut évoluer à l'exécution. vous pouvez stocker des objets Java dans une ArrayList
et en ajouter de nouveaux au moment de l'exécution.
Vous utiliserez ArrayList
lorsque vous n'avez pas besoin d'ajouter ou de supprimer des objets fréquemment. Parce que lorsque vous supprimez un objet, tous les autres objets doivent être repositionnés dans la ArrayList
. Si vous rencontrez ce genre de situation, essayez plutôt d'utiliser LinkedList
.
Vous pouvez trouver plus d'informations à partir de ici .
List<NameValuePair>
ou ArrayList<NameValuePair>
sont utilisés pour envoyer des valeurs de l'application Android au serveur.
@Override
protected Header[] doInBackground(String... params) {
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(params[1]);
ArrayList<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();
nameValuePair.add(new BasicNameValuePair("ssn", params[0]));
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair,
"UTF-8"));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
response = EntityUtils.toString(httpEntity);
allHeaders = httpResponse.getAllHeaders();
} catch (Exception ex) {
ex.printStackTrace();
}
return allHeaders;
}
Dans le code ci-dessus, je passe un attribut ssn
au serveur à l'aide de ArrayList<NameValuePair>
.
protected String doInBackground(String... params)
{
try
{
List<NameValuePair> param = new ArrayList<NameValuePair>();
param.add(new BasicNameValuePair("username", edName));
param.add(new BasicNameValuePair("email", edEmail));
param.add(new BasicNameValuePair("password", edPassword));
param.add(new BasicNameValuePair("mobile", edMobile));
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(params[0]);
httpPost.setEntity(new UrlEncodedFormEntity(param));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
InputStream is = httpEntity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null)
{sb.append(line + "\n");
}
String json = sb.toString();
JSONObject jObj = new JSONObject(json);
msg= jObj.getString("message");
}
catch(Exception e)
{
Log.e("error", "Network problem");
}
return msg;
}
}
Utilisé ce code pour télécharger des données depuis une application Android sur le serveur.
// image file *********************************
// here send all the sqlite database datas to local sever via HttpPost("url");
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("job_id","001"));
nameValuePairs.add(new BasicNameValuePair("picture_path",picturejson.toString()));
nameValuePairs.add(new BasicNameValuePair("date_time",datetime_str));
nameValuePairs.add(new BasicNameValuePair("location",gpslocation_str));
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://Sample/iphone/getinput");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
httpclient.execute(httppost);
HttpResponse response = httpclient.execute(httppost);
//HttpEntity entity = response.getEntity();
//is = entity.getContent();
//HttpResponse response = httpClient.execute(postRequest);
BufferedReader reader = new BufferedReader(new InputStreamReader(
response.getEntity().getContent(), "UTF-8"));
String sResponse;
StringBuilder s = new StringBuilder();
while ((sResponse = reader.readLine()) != null) {
s = s.append(sResponse);
}
System.out.println("Response: ");
Log.v("hari", "Response : ");
}catch(Exception e){
//Log.e("log_tag", "Error in http connection "+e.toString());
}