0

我想從我的服務器上加載我的android上的圖片。 我得到它的工作。但奇怪的是我在下面的代碼中得到了ArrayIndexOutOfBoundsException。因爲我使用HttpURLconnection.getContentLength()來生成我的字節數組,所以我無法弄清楚爲什麼會發生這種情況。從getContentLength的值與我的服務器上的確切文件長度相匹配,所以它不是傳輸中的問題。ArrayIndexOutOfBound在加載互聯網圖片

作爲解決方法:我通過給數組添加額外的長度來解決問題。這工作,但我擔心額外的長度會導致BitmapFactory產生不需要的結果。

有人可以告訴我一個解決方案嗎? 或者我應該總是添加一些安全性並將文件的確切長度傳遞給Bitmapfactory?

下面是我的代碼的連接部分,其出錯:

try{ 
     Log.d("connect_server","is connect"); 
     URL url = new URL("someurl"); 
     HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
     connection.setDoInput(true); 
     connection.setDoOutput(true); 
     connection.setRequestMethod("POST"); 
     connection.setUseCaches(false); 
     connection.connect(); 

     OutputStreamWriter osw=new OutputStreamWriter(connection.getOutputStream()); 
     Log.d("post param",params); 
     osw.write(params); 
     osw.flush(); 
     osw.close(); 
     byte[] buf=new byte[connection.getContentLength()+20]; 
     InputStream src=connection.getInputStream(); 


     int total=0; 
     int amt=512; 
     while(amt!=-1){ 
      Log.d("isloafing",Integer.toString(total)); 
      amt=src.read(buf,total,amt); 
      total+=amt; 
      Log.d("is loaDing",Integer.toString(amt)); 
     } 



     Message msg=hnd.obtainMessage(); 
     msg.arg1=msgTag; 
     msg.obj=buf; 
     hnd.sendMessage(msg); 

    }catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 
+0

,您在獲得什麼類型的反應:

要來自服務器的響應,你可以這樣做閱讀服務器 – warl0ck

+0

您可以使用Picasso或Glide庫來加載圖像。 – Dhiren

+0

@ warl0ck我發佈的代碼在我的測試手機上運行並加載圖片。所以它不會是404或類似的東西。只是想知道爲什麼,如果它是可以避免的。 – HarryTheF

回答

0

這是沒有必要讓長度和所有從服務器獲取完整的迴應,而不是你可以檢查if the response code is 200 or not這應該做的伎倆。

private String readFromStream(InputStream inputStream) throws IOException { 
    StringBuilder output = new StringBuilder(); 
    if (inputStream != null) { 
     InputStreamReader inputStreamReader = new InputStreamReader(inputStream, Charset.forName("UTF-8")); 
     BufferedReader reader = new BufferedReader(inputStreamReader); 
     String line = reader.readLine(); 
     while (line != null) { 
      output.append(line); 
      line = reader.readLine(); 
     } 
    } 
    return output.toString(); 
} 

try{ 
     String response = ""; 
     Log.d("connect_server","is connect"); 
     URL url = new URL("someurl"); 
     HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
     connection.setDoInput(true); 
     connection.setDoOutput(true); 
     connection.setRequestMethod("POST"); 
     connection.setUseCaches(false); 

     OutputStreamWriter osw=new OutputStreamWriter(connection.getOutputStream()); 
     Log.d("post param",params); 
     osw.write(params); 
     osw.flush(); 
     osw.close(); 
     connection.connect(); 
     if (urlConnection.getResponseCode() == 200) { 
      inputStream = urlConnection.getInputStream(); 
      response = readFromStream(inputStream); 
     } 

     // now response has your server response use it however you want 


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

response字符串中包含的結果,你可以用它在你的項目中需要