1

當嘗試使用HttpURLConnection後的數據連接到http://ws.audioscrobbler.com/2.0/,我得到(隨機)EOFException類和FileNotFoundException異常的HttpURLConnection類的getInputStream()

EOFException 
對我的Nexus 4

FileNotFoundException: http://ws.audioscrobbler.com/2.0/ 

運行Android 4.2 0.2。

有人可以幫忙嗎?

編輯

我升級到4.3:同樣的問題。

public InputStream getData(String url_str, List<NameValuePair> postData) { 

    Map<String, Object> response = new HashMap<String, Object>(); 

    InputStream is = null; 
    HttpURLConnection conn = null; 

    try { 

     URL url = new URL(url_str); 

     conn = (HttpURLConnection) url.openConnection(); 
     conn.setReadTimeout(CONNECTION_TIMEOUT); 
     conn.setConnectTimeout(READ_TIMEOUT); 
     conn.setRequestMethod("POST"); 
     conn.setDoInput(true);      

     if(postData != null){ 

      conn.setDoOutput(true); 

      OutputStream os = conn.getOutputStream(); 
      BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8")); 
      writer.write(getQuery(postData)); 
      writer.close(); 
      os.close(); 
     } 


     // Starts the query 

     conn.connect(); 


     // Get and return response 

     is = conn.getInputStream();    

     return is; 

    } catch (IOException e) { 

     // ... 

    } finally { 

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

     if (is != null) { 
      try { 
       is.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 


private String getQuery(List<NameValuePair> params) throws UnsupportedEncodingException 
{ 
    StringBuilder result = new StringBuilder(); 
    boolean first = true; 

    for (NameValuePair pair : params) 
    { 
     if (first) 
      first = false; 
     else 
      result.append("&"); 

     result.append(URLEncoder.encode(pair.getName(), "UTF-8")); 
     result.append("="); 
     result.append(URLEncoder.encode(pair.getValue(), "UTF-8")); 
    } 

    return result.toString(); 
} 
+0

你有什麼做http連接? – Wishy

+0

帶POST數據的http請求! – jul

回答

1

我檢查conn.getResponseCode()並獲得403的異常可能是由於這一點。

0

好嗎試試這個它可能會幫助

public void httppost() 
{ 

    URL="Your URL"; 

    InputStream is = null; 

    //Making HTTP request 
    try { 
     // defaultHttpClient 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 

     namevaluepair.add(new BasicNameValuePair("name1",value1)); 
     namevaluepair.add(new BasicNameValuePair("name2",value2)); 


     String enc_url = urlEncode(URL); 
     HttpPost httpPost = new HttpPost(enc_url); 

     httpPost.setEntity(new UrlEncodedFormEntity(namevaluepair)); 

     HttpResponse httpResponse = httpClient.execute(httpPost); 
     HttpEntity httpEntity = httpResponse.getEntity(); 
     is = httpEntity.getContent();    

    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    try { 
     BufferedReader reader = new BufferedReader(new InputStreamReader(
       is, "iso-8859-1"), 8); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 
     while ((line = reader.readLine()) != null) { 
      sb.append(line); 
     } 
     is.close(); 
     String response = sb.toString(); 

    } catch (Exception e) { 
     Log.e("Buffer Error", "Error converting result " + e.toString()); 
    } 

} 
+0

謝謝,但我想了解我的代碼中的「HttpURLConnection」有什麼問題。 – jul

0

您需要指定內容長度。

if(postData != null){ 
       byte[] requestContent = getQuery(postData); 
       conn.setDoOutput(true); 
// Specify content type 
       conn.setRequestProperty("Content-Type", mRequestContentType); 
       conn.setRequestProperty("Content-Length", 
        Integer.toString(requestContent.length)); 
       conn.setFixedLengthStreamingMode(requestContent.length); 
       OutputStream os = conn.getOutputStream(); 
       BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8")); 
       writer.write(requestContent); 
       writer.close(); 
       os.close(); 
      } 
相關問題