title: Android: upload photos
body: <p>Greetings,</p>
  
  <p>I'm having trouble uploading a photo from my Android phone. Here is the code I'm using to prompt the user to select a photo:</p>
  
  <pre><code>public class Uploader{
          public void upload(){
              Log.i("EOH","hi...");
              Intent photoPickerIntent = new Intent(Intent.ACTION_GET_CONTENT);
              photoPickerIntent.setType("image/*");
              startActivityForResult(photoPickerIntent, 1);
          }
          protected void onActivityResult(int requestCode, int resultCode, Intent data)
          {
              if (resultCode == RESULT_OK)
              {
                  Bundle extras = data.getExtras();
                  Bitmap b = (Bitmap) extras.get("data");
                  //what do do now with this Bitmap...
                      //how do I upload it?
  
  
  
  
              }
          }
  
      }
  </code></pre>
  
  <p>So I have the Bitmap b, however I don't know what to do next?</p>
  
  <p>I have the following code for sending POST requests:</p>
  
  <pre><code>List&lt;NameValuePair&gt; params = new ArrayList&lt;NameValuePair&gt;(2);  
  params.add(new BasicNameValuePair("someValA", String.valueOf(lat)));  
  params.add(new BasicNameValuePair("someValB", String.valueOf(lng)));  
  new HttpConnection(handler).post("http://myurl.com/upload.php",params);
  </code></pre>
  
  <p>How can I hook up a Bitmap image to this? I've searched google for ages and can't find a good way of doing it.</p>
  
  <p>I hope someone can help.</p>
  
  <p>Many thanks in advance,</p>
  
  <hr>
  
  <p>Ok I've tried chirag shah's suggestion. Here is my code:</p>
  
  <pre><code>protected void onActivityResult(int requestCode, int resultCode, Intent data)
          {
              if (resultCode == RESULT_OK)
              {
                  Uri imageUri=data.getData();
                  List&lt;NameValuePair&gt; params = new ArrayList&lt;NameValuePair&gt;(1);
                  params.add(new BasicNameValuePair("image", imageUri.getPath()));
                  post("http://www.myurl.com/ajax/uploadPhoto.php",params);
              }
          }
  </code></pre>
  
  <p>where the post function (as recommended) is:</p>
  
  <pre><code>public void post(String url, List&lt;NameValuePair&gt; nameValuePairs) {
              HttpClient httpClient = new DefaultHttpClient();
              HttpContext localContext = new BasicHttpContext();
              HttpPost httpPost = new HttpPost(url);
  
              try {
                  MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
  
                  for(int index=0; index &lt; nameValuePairs.size(); index++) {
                      if(nameValuePairs.get(index).getName().equalsIgnoreCase("image")) {
                          // If the key equals to "image", we use FileBody to transfer the data
                          entity.addPart(nameValuePairs.get(index).getName(), new FileBody(new File (nameValuePairs.get(index).getValue())));
                      }else{
                          // Normal string data
                          entity.addPart(nameValuePairs.get(index).getName(), new StringBody(nameValuePairs.get(index).getValue()));
                      }
                  }
  
                  httpPost.setEntity(entity);
  
                  HttpResponse response = httpClient.execute(httpPost, localContext);
                  Log.i("EOH",response.toString());
              } catch (IOException e) {
                  e.printStackTrace();
              }
      }
  </code></pre>
  
  <p>However myurl.com/ajax/uploadPhoto.php is getting nothing. I've created a PHP log to log any activity on uploadPhoto.php, and nothing is showing up. It's worth noting that if I just type myurl.com/ajax/uploadPhoto.php straight into a web browser, it logs fine.</p>
  
  <p>Any more suggestions?</p>
  
  <p>Many thanks,</p>