2013-06-30 12 views
41
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(); 
    } 
} 
} 

Więc mam ten kod i mam go od uploading to Imgur v3 using Java https errors i pojawia się błąd na linii 50 dla „List” mówi miLista typów nie jest typowa; to nie może być parametryzowane z argumentami [HTTPClient]

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

Co mogę zrobić rozwiązać ten problem?

Używam http://hc.apache.org/httpclient-3.x/ i chcę przesłać obraz do imgur za pomocą ich API v3.

EDYCJA: Po zmianie importu otrzymuję teraz te błędy.

To rozwiązuje to, ale daj mi jeszcze dwa błędy.

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

The method add(NameValuePair) in the type List is not applicable for the arguments (BasicNameValuePair)

I

post.setEntity(new UrlEncodedFormEntity(nameValuePairs));

The constructor UrlEncodedFormEntity(List) is undefined

Odpowiedz

128

Twój import ma subtelny błąd:

import java.awt.List; 

To powinno być:

import java.util.List; 

Problem polega na tym, że zarówno awt, jak i pakiet Java udostępniają klasę o nazwie List. Ten pierwszy jest elementem wyświetlającym, drugi jest typem generycznym używanym w kolekcjach. Ponadto java.util.ArrayList rozciąga się na java.util.List, niejava.awt.List, więc gdyby nie generics, nadal byłby problem.

Edit: (do zajęcia dodatkowe pytania podane przez OP) jako odpowiedź na Twój komentarz, wydaje się, że istnieje pylników subtelna kwestia importu.

import org.omg.DynamicAny.NameValuePair; 

powinny być

import org.apache.http.NameValuePair 

nameValuePairs teraz używa poprawnej rodzajowego parametr typu, rodzajowy argument new UrlEncodedFormEntity, który jest List<? extends NameValuePair>, staje się ważna, ponieważ Twój NameValuePair jest teraz taka sama jak ich NameValuePair. Wcześniej org.omg.DynamicAny.NameValuePair nie rozszerzyła org.apache.http.NameValuePair i skrócono nazwę typu NameValuePair ocenioną na org.omg... w pliku, ale org.apache... w swoim kodzie.

+0

jestem edycji moją odpowiedź teraz ... @ user2526311 jest ona ustalana teraz. – hexafraction

+0

Jak to się dzieje, że po uruchomieniu programu zwraca "null: null" lub czy powinienem opublikować to w nowym pytaniu? – user2526311

+0

@ user2526311 Na początku nie ustawiaj null, ustaw na pusty lub pusty łańcuch. – hexafraction

11

Spróbuj zaimportować

java.util.List; 

zamiast

java.awt.List; 
+5

@hexafraction Nie widziałem twojej odpowiedzi, po jej przyjęciu zdałem sobie sprawę, że już ją zidentyfikowałeś. Zwykle przechodzę do trybu pisania odpowiedzi i uzyskuję wyskakujące okienko, pojawia się nowa odpowiedź. Wygrałeś w czasie. –

-1

Mam ten sam błąd, ale gdy zrobiłem jak poniżej, to problem został rozwiązany.
Zamiast pisać tak:

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

użyć poniżej jednego:

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

Oboje użyliście niewłaściwego importu. Potrzebujesz interfejsu dla 'List' z' java.util.List'. – hofmeister

Powiązane problemy