The type List is not generic; it cannot be parameterized with arguments [HTTPClient]

JavaApiHttpclientImgur

Java Problem Overview


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 https://stackoverflow.com/questions/14710247/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

Java Solutions


Solution 1 - Java

Your import has a subtle error:

> import java.awt.List;

It should be:

import java.util.List;

The problem is that both awt and Java's util package provide a class called List. The former is a display element, the latter is a generic type used with collections. Furthermore, java.util.ArrayList extends java.util.List, not java.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.

import org.omg.DynamicAny.NameValuePair;

should be

import org.apache.http.NameValuePair

nameValuePairs now uses the correct generic type parameter, the generic argument for new UrlEncodedFormEntity, which is List<? extends NameValuePair>, becomes valid, since your NameValuePair is now the same as their NameValuePair. Before, org.omg.DynamicAny.NameValuePair did not extend org.apache.http.NameValuePair and the shortened type name NameValuePair evaluated to org.omg... in your file, but org.apache... in their code.

Solution 2 - Java

Try to import

java.util.List;

instead of

java.awt.List;

Solution 3 - Java

Adding java.util.list will resolve your problem because List interface which you are trying to use is part of java.util.list package.

Solution 4 - Java

I got the same error, but when i did as below, it resolved the issue.
Instead of writing like this:

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

use the below one:

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser2526311View Question on Stackoverflow
Solution 1 - JavananofaradView Answer on Stackoverflow
Solution 2 - JavaJuned AhsanView Answer on Stackoverflow
Solution 3 - JavaSumit SoodView Answer on Stackoverflow
Solution 4 - JavaKotesView Answer on Stackoverflow