Ponieważ programiści Androida zalecają używanie tej HttpURLConnection
klasy, zastanawiałem się, czy ktoś może podać mi dobry przykład, jak wysłać „plik” mapy bitowej (właściwie strumień w pamięci) przez POST do serwera HTTP Apache. Nie interesują mnie pliki cookie, uwierzytelnianie ani nic skomplikowanego, ale chcę mieć niezawodną i logiczną implementację. Wszystkie przykłady, które tu widziałem, wyglądają bardziej jak „spróbujmy tego i może zadziała”.
W tej chwili mam ten kod:
URL url;
HttpURLConnection urlConnection = null;
try {
url = new URL("http://example.com/server.cgi");
urlConnection = (HttpURLConnection) url.openConnection();
} catch (Exception e) {
this.showDialog(getApplicationContext(), e.getMessage());
}
finally {
if (urlConnection != null)
{
urlConnection.disconnect();
}
}
gdzie showDialog powinien po prostu wyświetlać AlertDialog
(w przypadku nieprawidłowego adresu URL?).
Teraz powiedzmy, że generuję mapę bitową w ten sposób: Bitmap image = this.getBitmap()
wewnątrz kontrolki pochodzącej z View
i chcę ją wysłać przez POST. Jaka byłaby właściwa procedura, aby to osiągnąć? Z jakich klas muszę korzystać? Czy mogę użyć HttpPost
jak w tym przykładzie ? Jeśli tak, jak powinienem skonstruować plikInputStreamEntity
dla mojej mapy bitowej? Byłoby odrażające, gdyby trzeba było najpierw zapisać bitmapę w pliku na urządzeniu.
Powinienem też wspomnieć, że naprawdę muszę wysłać każdy niezmieniony piksel oryginalnej mapy bitowej na serwer, więc nie mogę go przekonwertować na JPEG.