2013-11-04 32 views
1
public static Bitmap getImage(String address) throws Exception { 

    Bitmap imgmap = null; 
    InputStream is = null; 

    URL url = new URL(address); 

    HttpURLConnection conn = (HttpURLConnection)url.openConnection(); 
    try { 
     conn.setRequestMethod("GET"); >>> here was been excuted,but go to finally block 
     conn.setConnectTimeout(5000); 
     is = conn.getInputStream(); 
     byte[] imgbytes = StreamTool.getBytes(is); 
     imgmap = BitmapFactory.decodeByteArray(imgbytes, 0, imgbytes.length); 

    } finally { 
     if (is != null) { 
      is.close(); 
     } 
     if (conn != null) { 
      conn.disconnect(); 
     } 
    } 

    return imgmap; 
} 

之前conn.setRequestMethod("GET")被執行,thorws的異常Connection已經建立。誰可以給我一個解決方案android java.net.ProtocolException:連接已經建立

回答

-3

這是因爲函數setRequestMethod()必須在連接之前調用。 檢查此鏈接

http://developer.android.com/reference/java/net/HttpURLConnection.html#setRequestMethod(java.lang.String)

的openConnection之前因此,更好地稱之爲()。或者根本不叫它。

+0

非常感謝您 – acoder

+2

這個答案完全是胡說八道。在調用'openConnection()'之前,你沒有一個對象,你可以調用'setRequestMethod()'。您提供的鏈接沒有說明您在此聲明的內容。 – EJP

0

當您創建HttpURLConnection的實例時,它默認爲請求方法GET因此在這種情況下不需要調用setRequestMethod。

This link包含一些關於HTTP連接的奇妙細節以及如何使用它們。

7

我知道這完全是無稽之談。但是當我在這條線上放置斷點時,它發生在調試模式下。

con.setRequestMethod()

只要我刪除了破發點,錯誤已經!

+0

我面對同樣的問題,如果使用調試模式會有問題,但是你知道背後的原因嗎?我的鏈接[http://stackoverflow.com/questions/34447190/cant-reset-method-already-connected?noredirect=1#comment56638318_34447190] – user1169587

+0

不幸的是,我不知道它。 –

+1

完全一樣的事情發生在我身上。我做了什麼清理和重建項目,在打開輸出流以連接寫參數之後放置了斷點。具體在「InputStream inputStream = connection.getInputStream();」它像魅力一樣工作。我不知道爲什麼?怎麼樣?它只是工作。謝謝你們 –

0

發生這種情況是因爲你設置請求方法之前連接

一個建議你試試這個:

conn.setRequestMethod("GET"); 
conn.connect); 
conn.setConnectTimeout(5000); 
is = conn.getInputStream(); 
byte[] imgbytes = StreamTool.getBytes(is); 
0

經驗的同時,找出IDE是看的連接的領域,我已經添加到調試,然後導致連接建立之前其他代碼運行像設置屬性。

所以,如果你想獲得一些「屬性」之前連接調試期間準備好了,你會得到這個錯誤