English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Exemple
Lors de la mise en œuvre d'un client de service web Android, par exemple un client de microblog ou un client de forum, l'envoi et le téléchargement d'images sont souvent utilisés. Ici, nous allons expliquer comment utiliser HttpClient pour réaliser les fonctionnalités d'envoi et de téléchargement d'images.
1 Téléchargement d'image: Lors de l'envoi d'une image, d'abord obtenir le chemin d'accès à l'image, créer un fichier, convertir l'image en flux de bytes et l'écrire dans la requête, puis envoyer cette requête.
Code client :
File file = new File(imageUrl); String httpUrl = httpDomain+"AddImageServlet"+"?gid="+gid; HttpPost request = new HttpPost(httpUrl); HttpClient httpClient = new DefaultHttpClient(); FileEntity entity = new FileEntity(file,"binary");/octet-stream"); HttpResponse response; try { request.setEntity(entity); entity.setContentEncoding("binary/octet-stream"); response = httpClient.execute(request); //Si le statut de retour est200, obtenir le résultat de retour if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){ ……//Le téléchargement de l'image a réussi } } catch(Exception e){ }
Le travail effectué par le serveur consiste à recevoir ce flux de bytes, à l'écrire dans un fichier, à enregistrer ce fichier dans le dossier correspondant du serveur et à enregistrer le chemin d'accès du fichier dans la base de données, enregistrer l'adresse du fichier image dans la base de données.
Code côté serveur :
//Obtenir l'ID de l'actualité String gid = request.getParameter("gid"); String filePath = getRealPath(request) + "\\userpic\\"; // Définir la taille maximale en octets du fichier téléchargé int MAX_SIZE = 102400 * 102400; // Déclarer la classe de lecture de fichier DataInputStream in = null; FileOutputStream fileOut = null; // Obtenir le type de données téléchargées par le client String contentType = request.getContentType(); if(contentType.indexOf("binary",/octet-(stream") >= 0){ // Lire les données téléchargées in = new DataInputStream(request.getInputStream()); int formDataLength = request.getContentLength(); // Si l'image est trop grande if(formDataLength > MAX_SIZE){ String errormsg=("Le nombre d'octets du fichier téléchargé ne peut pas dépasser " + MAX_SIZE); out.println(errormsg); return ; } // Enregistrer les données du fichier téléchargé byte dataBytes[] = new byte[formDataLength]; int byteRead = 0; int totalBytesRead = 0; // Les données téléchargées sont stockées dans un tableau de bytes while(totalBytesRead < formDataLength){ byteRead = in.read(dataBytes,totalBytesRead,formDataLength); totalBytesRead += byteRead; } String fileName = filePath + gid+.png; // 检查上载文件的目录是否存在 File fileDir = new File(filePath); if(!fileDir.exists()){ fileDir.mkdirs(); } // 创建文件的写出类 fileOut = new FileOutputStream(fileName); // 保存文件的数据 fileOut.write(dataBytes); fileOut.close(); //保存文件的路径名 ……
2 图片下载:首先获得网络图片的图片地址,发送请求后,服务器将会返回该图片的字节流,利用BitmapFactory.decodeStream()方法将字节流转化为图片并返回。具体代码如下:
//获得网络中的图片 public Bitmap getGossipImage(String gid){ String httpUrl = httpDomain+"userpic/"+gid+.png; Bitmap bitmap = null; HttpGet httpRequest = new HttpGet(httpUrl); //取得HttpClient 对象 HttpClient httpclient = new DefaultHttpClient(); try { //请求httpClient ,取得HttpRestponse HttpResponse httpResponse = httpclient.execute(httpRequest); if(httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK){ //取得相关信息 取得HttpEntiy HttpEntity httpEntity = httpResponse.getEntity(); InputStream is = httpEntity.getContent(); bitmap = BitmapFactory.decodeStream(is); is.close(); } else { Toast.makeText(context, "Échec de la connexion!", Toast.LENGTH_SHORT).show(); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return bitmap; }
Les lecteurs intéressés par plus de contenu sur Android peuvent consulter les sujets spéciaux de ce site : "Résumé des techniques de traitement des graphiques et des images Android", "Tutoriel d'entrée et de niveau supérieur de développement Android", "Résumé des techniques de débogage et des solutions de problèmes courants Android", "Résumé des techniques de manipulation multimédia Android (audio, vidéo, enregistrement, etc.), "Résumé des utilisations des composants de base Android", "Résumé des techniques des vues View Android", "Résumé des techniques des layouts layout Android" et "Résumé des utilisations des contrôles Android"
J'espère que les informations de cet article seront utiles pour la conception de programmes Android.
Déclaration : le contenu de cet article est issu du réseau, propriété de ses auteurs respectifs, contribué et téléversé par les utilisateurs d'Internet de manière spontanée. Ce site ne détient pas de droits de propriété, n'a pas été édité par l'homme, et n'assume aucune responsabilité juridique. Si vous trouvez du contenu suspect de violation de droits d'auteur, veuillez envoyer un e-mail à : notice#oldtoolbag.com (veuillez remplacer # par @ lors de l'envoi d'un e-mail pour signaler une violation, et fournir des preuves pertinentes. Une fois vérifié, ce site supprimera immédiatement le contenu suspect de violation de droits d'auteur.)