0

Ich versuche ein Bild auf meinem Android von meinem Server zu laden. Ich habe es zur Arbeit gebracht. Aber seltsamerweise habe ich ArrayIndexOutOfBoundsException in meinem Code unten. Da ich HttpURLconnection.getContentLength() verwende, um meine Byte-Array zu generieren, kann ich nicht herausfinden, warum das passiert. Der Wert von getContentLength stimmte mit der genauen Dateilänge auf meinem Server überein, daher ist es nicht das Problem bei der Übertragung.ArrayIndexOutOfBound während des Ladens Internet Bild

Als Workaround: Ich habe es zu arbeiten, indem Sie zusätzliche Länge zum Array hinzufügen. Das funktioniert, aber ich mache mir Sorgen, dass die zusätzliche Länge dazu führt, dass BitmapFactory unerwünschte Ergebnisse produziert.

Kann mir jemand eine Lösung dazu sagen? Oder sollte ich immer etwas Sicherheit hinzufügen und die genaue Länge der Datei an die Bitmapfactory übergeben?

Unten ist das Verbindungsteil meines Codes, die schief geht:

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

welche Art von Antwort werden Sie davon ab, Der Server – warl0ck

+0

Sie können Picasso oder Glide-Bibliothek verwenden, um das Bild zu laden. – Dhiren

+0

@ warl0ck Der Code, den ich poste, läuft auf meinem Testtelefon und lädt das Bild. Es wird also nicht 404 oder so etwas sein. Ich wollte nur wissen warum und ob es vermeidbar ist. – HarryTheF

Antwort

0

Es ist nicht notwendig zu bekommen Länge und alle bekommen die vollständige Antwort vom Server stattdessen können Sie einfach überprüfen if the response code is 200 or not sollte dies tun, den Trick .

von der Server-Antwort lesen Sie so etwas wie tun:

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

Die response Zeichenfolge enthält das Ergebnis, können Sie es in Ihrem Projekt je nach Bedarf verwenden können

Verwandte Themen