import Java.awt.List;
import Java.awt.image.BufferedImage;
import Java.io.BufferedReader;
import Java.io.ByteArrayOutputStream;
import Java.io.File;
import Java.io.InputStreamReader;
import Java.util.ArrayList;
import javax.imageio.ImageIO;
import org.Apache.commons.codec.binary.Base64;
import org.Apache.http.HttpResponse;
import org.Apache.http.client.HttpClient;
import org.Apache.http.client.entity.UrlEncodedFormEntity;
import org.Apache.http.client.methods.HttpPost;
import org.Apache.http.impl.client.DefaultHttpClient;
import org.Apache.http.message.BasicNameValuePair;
import org.omg.DynamicAny.NameValuePair;
public class Upload {
public static void main (String[] args) {
System.out.println(Imgur("C:\\Users\\username\\Desktop\\image.jpg", "clientID"));
}
public static String Imgur (String imageDir, String clientID) {
//create needed strings
String address = "https://api.imgur.com/3/image";
//Create HTTPClient and post
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(address);
//create base64 image
BufferedImage image = null;
File file = new File(imageDir);
try {
//read image
image = ImageIO.read(file);
ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
ImageIO.write(image, "png", byteArray);
byte[] byteImage = byteArray.toByteArray();
String dataImage = new Base64().encodeAsString(byteImage);
//add header
post.addHeader("Authorization", "Client-ID" + clientID);
//add image
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
nameValuePairs.add(new BasicNameValuePair("image", dataImage));
post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
//execute
HttpResponse response = client.execute(post);
//read response
BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
String all = null;
//loop through response
while (rd.readLine() != null) {
all = all + " : " + rd.readLine();
}
return all;
}
catch (Exception e){
return "error: " + e.toString();
}
}
}
Donc, j'ai ce code et je l'ai eu de en le téléchargeant sur Imgur v3 en utilisant des erreurs Java https et j'ai une erreur sur la ligne 50 pour "List" qui me dit
Le type List n'est pas générique; il ne peut pas être paramétré avec des arguments
Que puis-je faire pour résoudre ce problème?
J'utilise http://hc.Apache.org/httpclient-3.x/ et je souhaite télécharger une image sur imgur à l'aide de leur API v3.
EDIT: Après avoir modifié l'importation, je reçois maintenant ces erreurs.
Cela résout le problème, mais donnez-moi deux autres erreurs.
nameValuePairs.add(new BasicNameValuePair("image", dataImage));
La méthode add (NameValuePair) dans le type List n'est pas applicable pour les arguments (BasicNameValuePair)
Et
post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
Le constructeur UrlEncodedFormEntity (List) n'est pas défini
Votre importation a une erreur subtile:
import Java.awt.List;
CA devrait etre:
import Java.util.List;
Le problème est que awt
et le package util de Java fournissent tous deux une classe appelée List
. Le premier est un élément d'affichage, le dernier est un type générique utilisé avec les collections. De plus, Java.util.ArrayList
étend Java.util.List
, pasJava.awt.List
donc sans les génériques, cela aurait quand même posé problème.
Edit: (pour répondre à d'autres questions posées par OP) En réponse à votre commentaire, il semble qu'il y ait un problème d'importation subtile anther.
import org.omg.DynamicAny.NameValuePair;
devrait être
import org.Apache.http.NameValuePair
nameValuePairs
utilise maintenant le paramètre de type générique correct, l'argument générique de new UrlEncodedFormEntity
, qui est List<? extends NameValuePair>
, devient valide, puisque votre NameValuePair est maintenant identique à leur NameValuePair. Avant, org.omg.DynamicAny.NameValuePair
ne prolongeait pas org.Apache.http.NameValuePair
et le nom de type abrégé NameValuePair
était évalué à org.omg...
dans votre fichier, mais à org.Apache...
dans son code.
Essayez d'importer
Java.util.List;
au lieu de
Java.awt.List;
L'ajout de Java.util.list
résoudra votre problème, car l'interface de liste que vous essayez d'utiliser fait partie du package Java.util.list
.
J'ai eu la même erreur, mais quand j'ai fait comme ci-dessous, le problème a été résolu.
Au lieu d'écrire comme ceci:
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
utilisez le ci-dessous:
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);