developer tip

유형 목록은 일반적이지 않습니다.

optionbox 2021. 1. 9. 09:44
반응형

유형 목록은 일반적이지 않습니다. 인수 [HTTPClient]로 매개 변수화 할 수 없습니다.


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

그래서 저는 그 코드를 가지고 있고 Java https 오류를 사용하여 Imgur v3에 업로드 한 결과 50 행에 "List"라는 오류가 표시됩니다.

유형 목록은 일반적이지 않습니다. 인수로 매개 변수화 할 수 없습니다.

이 문제를 해결하려면 어떻게해야합니까?

내가 사용하고 http://hc.apache.org/httpclient-3.x/을 자신의 V3 API를 사용하여 imgur 할 이미지를 업로드 할 수 있습니다.

편집 : 가져 오기를 변경 한 후 이제 이러한 오류가 발생합니다.

그것은 그것을 해결하지만 두 가지 더 많은 오류를 제공합니다.

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

List 형식의 add (NameValuePair) 메서드는 인수 (BasicNameValuePair)에 적용 할 수 없습니다.

post.setEntity(new UrlEncodedFormEntity(nameValuePairs));

생성자 UrlEncodedFormEntity (List)가 정의되지 않았습니다.


가져 오기에 미묘한 오류가 있습니다.

import java.awt.List;

그것은해야한다:

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.


Try to import

java.util.List;

instead of

java.awt.List;

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


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

ReferenceURL : https://stackoverflow.com/questions/17385961/the-type-list-is-not-generic-it-cannot-be-parameterized-with-arguments-httpcli

반응형