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();
}
}
}
So I have that code and I got it from uploading to Imgur v3 using Java https errors and I get an error on line 50 for "List" telling me
The type List is not generic; it cannot be parameterized with arguments
What can I do to solve this?
I'm using http://hc.apache.org/httpclient-3.x/ and want to upload an image to imgur using their v3 API.
EDIT: After changing the import I now get these errors.
That solves that but give me two more errors.
nameValuePairs.add(new BasicNameValuePair("image", dataImage));
The method add(NameValuePair) in the type List is not applicable for the arguments (BasicNameValuePair)
And
post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
The constructor UrlEncodedFormEntity(List) is undefined
Adding
java.util.list
will resolve your problem because List interface which you are trying to use is part ofjava.util.list
package.Try to import
instead of
Your import has a subtle error:
It should be:
The problem is that both
awt
and Java's util package provide a class calledList
. The former is a display element, the latter is a generic type used with collections. Furthermore,java.util.ArrayList
extendsjava.util.List
, notjava.awt.List
so if it wasn't for the generics, it would have still been a problem.Edit: (to address further questions given by OP) As an answer to your comment, it seems that there is anther subtle import issue.
should be
nameValuePairs
now uses the correct generic type parameter, the generic argument fornew UrlEncodedFormEntity
, which isList<? extends NameValuePair>
, becomes valid, since your NameValuePair is now the same as their NameValuePair. Before,org.omg.DynamicAny.NameValuePair
did not extendorg.apache.http.NameValuePair
and the shortened type nameNameValuePair
evaluated toorg.omg...
in your file, butorg.apache...
in their code.I got the same error, but when i did as below, it resolved the issue.
Instead of writing like this:
use the below one: