2013-06-30 26 views
0

返回null所以我試圖上傳的圖像使用他們的API第3版(http://api.imgur.com/)到Imgur,當我得到的迴應則返回我充分利用BufferedReader中

null : null 

這裏是我的全部代碼。

import java.util.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; 
import org.apache.http.NameValuePair; 

public class Upload { 

    public static void main (String[] args) { 

     System.out.println(Imgur("C:\\Users\\wiesa\\Desktop\\image.jpg",  "2313fab45c25337")); 
    } 

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

根據我用來初始化字符串 「所有」 來,如果我讓一個

null 

然後返回的是

空:空

但如果我將它初始化爲

"" 

然後返回的是

:空

我改變了行

String all = null; 

    //loop through response 
    String line = null; 
    while ((line = rd.readLine()) != null) { 
     all = all + " : " + line; 
    } 

    return all; 

和我得到的回報

空:{ 「數據」:{「錯誤」:「格式不正確的身份驗證header「,」request「:」/ 3/image「,」parameters「:」image = iVBORw0KGgoAAAANSUhEUgAAB4AAAASwCAIAAACVUsChAACAAElEQVR42uzdCXebyrI2YEuyY8fzPCbZOyfZd597v /// ...「,」method「:」POST「},」success「:false,」status「:403 }

回答

4

在每次迭代中,您讀取兩行而不是一行。更改

while (rd.readLine() != null) { // first line read 
    all = all + " : " + rd.readLine(); // second line read 
} 

String line; 
while ((line = rd.readLine()) != null) { 
    all = all + " : " + line; 
} 
+2

令人難以置信的是如何被經常犯同樣的錯誤... –

+0

更新原來​​的崗位不斷變化,雖然語句後會發生什麼。 – user2526311

+0

所以,這似乎解決了這個問題:你得到了迴應。你有什麼問題? –