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
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.ArrayList
Java.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.NameValuePair
org.Apache.http.NameValuePair
nicht erweitert und der verkürzte Typname NameValuePair
wurde in Ihrer Datei zu org.omg...
ausgewertet, sondern org.Apache...
im Code.
Versuchen Sie zu importieren
Java.util.List;
anstatt
Java.awt.List;
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.
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);