tipos tipo retorno manejo instanciar genericos generico genericas datos con comparar comodin clases arreglos java api httpclient imgur

java - retorno - El tipo List no es genérico; no se puede parametrizar con argumentos



tipo comodin java (4)

Agregar java.util.list resolverá su problema porque la interfaz de la Lista que está tratando de usar es parte del paquete java.util.list .

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(); } } }

Así que tengo ese código y lo recibí de subirlo a Imgur v3 usando los errores de Java https y recibo un error en la línea 50 de "Lista" diciéndome

El tipo List no es genérico; no se puede parametrizar con argumentos

¿Qué puedo hacer para resolver esto?

Estoy usando http://hc.apache.org/httpclient-3.x/ y quiero cargar una imagen para imgur usando su API v3.

EDITAR: Después de cambiar la importación ahora obtengo estos errores.

Eso resuelve eso, pero dame dos errores más.

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

El método add (NameValuePair) en el tipo List no es aplicable para los argumentos (BasicNameValuePair)

Y

post.setEntity(new UrlEncodedFormEntity(nameValuePairs));

El constructor UrlEncodedFormEntity (Lista) no está definido


Intenta importar

java.util.List;

en lugar de

java.awt.List;


Obtuve el mismo error, pero cuando hice lo siguiente, resolvió el problema.
En lugar de escribir así:

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

usa el siguiente:

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


Su importación tiene un error sutil:

import java.awt.List;

Debería ser:

import java.util.List;

El problema es que tanto awt como el paquete util de Java proporcionan una clase llamada List . El primero es un elemento de visualización, el último es un tipo genérico utilizado con colecciones. Además, java.util.ArrayList extiende java.util.List , no java.awt.List por lo que si no fuera por los genéricos, todavía habría sido un problema.

Editar: (para abordar otras preguntas formuladas por OP) Como respuesta a su comentario, parece que hay otro problema de importación sutil.

import org.omg.DynamicAny.NameValuePair;

debiera ser

import org.apache.http.NameValuePair

nameValuePairs ahora usa el parámetro de tipo genérico correcto, el argumento genérico para el new UrlEncodedFormEntity , que es List<? extends NameValuePair> List<? extends NameValuePair> , se vuelve válido, ya que su NameValuePair ahora es el mismo que su NameValuePair. Antes, org.omg.DynamicAny.NameValuePair no org.omg.DynamicAny.NameValuePair org.apache.http.NameValuePair y el nombre abreviado NameValuePair evaluaba como org.omg... en su archivo, pero org.apache... en su código.