Hey! Thank you very much for sharing this great code! It helped me a lot!
But I have on problem! I have created a ruby on rails webapp where I want to upload my image. On the website I can upload a image without a problem but when I want to upload the image with Android, the image cannot be uploaded for one reasen (but I don't know which)! I make a post request on the server (it passes all the right paramaters en the uploaded_data from the photo) but it won't save my photo in the database or upload it on my website.. Do i have to do something special with the website so I can upload an image from android to my website (server)? Thank you, Wouter On May 11, 4:51 am, "nEx.Software" <justin.shapc...@gmail.com> wrote: > I do something very similar to this but not with images, but rather > with torrent files. I don't have a 'bytes from file' method though, > probably works because torrent files are just text. Anyway, thanks for > sharing. > > On May 10, 10:31 am, Jeff Sharkey <jshar...@android.com> wrote: > > > Awesome, thanks for sharing the code. :) Does it need a specific > > version of HttpClient, different than the one that comes with the > > platform? > > > And for communicating status and progress back up to a UI thread, > > AsyncTask in 1.5 would be perfect. Also, what license is this code > > snippet released under? Thanks again for sharing! :) > > > j > > > On Sun, May 10, 2009 at 5:04 AM, Anna PS <annapowellsm...@googlemail.com> > > wrote: > > > > I'm starting a new thread, in response to a request over here: > > >http://bit.ly/E1Qqm > > > > This is some sample code for uploading an image to the web, as part of > > > a multipart message. It assumes that the photo is stored on the SD > > > card as "photo.jpg". You'll need to download and add a couple of jar > > > files to the project's built path - commons-httpclient.jar and > > > httpcomponents-client-4.0-alpha4. > > > > It is working on my device. However (big caveats here) - it's much > > > slower than I would like, and much slower than other applications I've > > > installed that upload photos. It also feels hacky - e.g. the way the > > > background thread communicates problems with the upload to the main > > > thread using variables. I'm sure there must be a neater way to do it. > > > > If you figure out a way to improve the code, please post suggestions > > > here! > > > > cheers, > > > Anna > > > > ------------------------------------- > > > > private static final int LOCATION_NOT_FOUND = 1; > > > private static final int UPLOAD_ERROR = 2; > > > final Runnable mUpdateResults = new Runnable() { > > > public void run() { > > > pd.dismiss(); > > > updateResultsInUi(); > > > } > > > }; > > > > public void onCreate(Bundle icicle) { > > > super.onCreate(icicle); > > > setContentView(R.layout.home); > > > > // do some stuff and then, when you want to upload a > > > photo.... > > > uploadToWeb(); > > > } > > > > // > > > ********************************************************************** > > > // uploadToWeb: uploads details, handled via a background thread > > > // > > > ********************************************************************** > > > private void uploadToWeb() { > > > Log.d(LOG_TAG, "uploadToWeb"); > > > pd = ProgressDialog > > > .show( > > > this, > > > "Uploading, please > > > wait...", > > > "Uploading. This can take > > > several seconds, depending on your > > > connection speed. Please be patient!", > > > true, false); > > > Thread t = new Thread() { > > > public void run() { > > > doUploadinBackground(); > > > mHandler.post(mUpdateResults); > > > } > > > }; > > > t.start(); > > > } > > > > private void updateResultsInUi() { > > > if (globalStatus == UPLOAD_ERROR) { > > > showDialog(UPLOAD_ERROR); > > > > } else if (globalStatus == LOCATION_NOT_FOUND) { > > > showDialog(LOCATION_NOT_FOUND); > > > > } else if (globalStatus == PHOTO_NOT_FOUND) { > > > showDialog(PHOTO_NOT_FOUND); > > > > } else { > > > // Success! - Proceed to the success activity! > > > Intent i = new Intent(Home.this, Success.class); > > > startActivity(i); > > > } > > > } > > > > // > > > ********************************************************************** > > > // onCreateDialog: Dialog warnings > > > // > > > ********************************************************************** > > > �...@override > > > protected Dialog onCreateDialog(int id) { > > > switch (id) { > > > case UPLOAD_ERROR: > > > return new AlertDialog.Builder(Home.this) > > > .setTitle("Upload error") > > > .setPositiveButton("OK", > > > new > > > DialogInterface.OnClickListener() { > > > public > > > void onClick(DialogInterface dialog, > > > > > > int whichButton) { > > > } > > > }) > > > .setMessage( > > > "Sorry, there was > > > an error uploading. Please try again later.") > > > .create(); > > > case LOCATION_NOT_FOUND: > > > return new AlertDialog.Builder(Home.this) > > > .setTitle("Location problem") > > > .setPositiveButton("OK", > > > new > > > DialogInterface.OnClickListener() { > > > public > > > void onClick(DialogInterface dialog, > > > > > > int whichButton) { > > > } > > > }) > > > .setMessage( > > > "Could not get > > > location! Can you see the sky? Please try again > > > later.") > > > .create(); > > > } > > > return null; > > > } > > > > // > > > ********************************************************************** > > > // doUploadinBackground: POST request > > > // > > > ********************************************************************** > > > private boolean doUploadinBackground() { > > > Log.d(LOG_TAG, "doUploadinBackground"); > > > String responseString = null; > > > PostMethod method; > > > > if ((latitude != null) && (longitude != null)) { > > > latString = latitude.toString(); > > > longString = longitude.toString(); > > > Log.e(LOG_TAG, "Latitude = " + latString); > > > Log.e(LOG_TAG, "Longitude = " + longString); > > > } else { > > > Log.e(LOG_TAG, "Location is null"); > > > globalStatus = LOCATION_NOT_FOUND; > > > return false; > > > } > > > > method = new PostMethod("yoururlhere"); > > > > try { > > > > byte[] imageByteArray = null; > > > > HttpClient client = new HttpClient(); > > > > > > client.getHttpConnectionManager().getParams().setConnectionTimeout( > > > 100000); > > > > File f = new > > > File(Environment.getExternalStorageDirectory(), > > > "photo.jpg"); > > > > imageByteArray = getBytesFromFile(f); > > > > Log > > > .d(LOG_TAG, "len of data is " + > > > imageByteArray.length > > > + " bytes"); > > > > FilePart photo = new FilePart("photo", new > > > ByteArrayPartSource( > > > "photo", imageByteArray)); > > > > photo.setContentType("image/jpeg"); > > > photo.setCharSet(null); > > > > > > ... > > read more » --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en -~----------~----~----~----~------~----~------~--~---