web-dev-qa-db-fra.com

Le type List n'est pas générique; il ne peut pas être paramétré avec des arguments [HTTPClient]

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

48
user2526311

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.

153
Andrey Akhmetov

Essayez d'importer

Java.util.List;

au lieu de

Java.awt.List;
15
Juned Ahsan

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.

1
Sumit Sood

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);
0
Kotes