it-swarm.com.de

Der Typ Liste ist nicht generisch. es kann nicht mit Argumenten parametrisiert werden [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();
    }
}
}

Also habe ich diesen Code und er stammt von Hochladen auf Imgur v3 mit Java-https-Fehlern und in Zeile 50 wird ein Fehler für "Liste" angezeigt

Der Typ Liste ist nicht generisch. es kann nicht mit Argumenten parametrisiert werden

Was kann ich tun, um das zu lösen?

Ich verwende http://hc.Apache.org/httpclient-3.x/ und möchte ein Bild mit der v3-API von imgur hochladen.

BEARBEITEN: Nach dem Ändern des Imports erhalte ich jetzt diese Fehler.

Das löst das, aber gib mir noch zwei Fehler.

nameValuePairs.add(new BasicNameValuePair("image", dataImage));

Die Methode add (NameValuePair) im Typ List gilt nicht für die Argumente (BasicNameValuePair)

Und

post.setEntity(new UrlEncodedFormEntity(nameValuePairs));

Der Konstruktor UrlEncodedFormEntity (List) ist undefiniert

48
user2526311

Ihr Import hat einen subtilen Fehler:

import Java.awt.List;

Es sollte sein:

import Java.util.List;

Das Problem ist, dass sowohl awt als auch Javas util-Paket eine Klasse mit dem Namen List enthalten. Ersteres ist ein Anzeigeelement, letzteres ist ein generischer Typ, der bei Sammlungen verwendet wird. Außerdem erweitert Java.util.ArrayListJava.util.List, notJava.awt.List. Wenn die Generika nicht wären, wäre dies immer noch ein Problem gewesen.

Bearbeiten: (um weitere Fragen des OP zu beantworten) Als Antwort auf Ihren Kommentar scheint es, dass es ein subtiles Importproblem mit anther gibt. 

import org.omg.DynamicAny.NameValuePair;

sollte sein 

import org.Apache.http.NameValuePair

nameValuePairs verwendet jetzt den korrekten generischen Typparameter. Das generische Argument für new UrlEncodedFormEntity, das List<? extends NameValuePair> ist, wird gültig, da Ihr NameValuePair jetzt mit ihrem NameValuePair identisch ist. Vorher hat org.omg.DynamicAny.NameValuePairorg.Apache.http.NameValuePair nicht erweitert und der verkürzte Typname NameValuePair wurde in Ihrer Datei zu org.omg... ausgewertet, sondern org.Apache... im Code.

153
Andrey Akhmetov

Versuchen Sie zu importieren

Java.util.List;

anstatt

Java.awt.List;
15
Juned Ahsan

Durch das Hinzufügen von Java.util.list wird Ihr Problem behoben, da die List-Schnittstelle, die Sie verwenden möchten, Teil des Java.util.list-Pakets ist.

1
Sumit Sood

Ich habe den gleichen Fehler erhalten, aber als ich das getan habe, wurde das Problem behoben.
Statt so zu schreiben:

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);

verwenden Sie die folgende: 

ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
0
Kotes