title: How to upload specific List image using click on Upload button
body: <p>How to upload specific image to server, whenever user do click on Upload button in a List View Item Row</p>
  
  <p><em>Using below line to show specific Image Name in Dialog Box, whenever user do click on Upload button:</em></p>
  
  <pre><code> fileName=ImageList.get(position).toString().substring(strPath.lastIndexOf('/')+1, strPath.length());
  </code></pre>
  
  <p><strong>OldUploadActivity.java:</strong></p>
  
  <pre><code>            //  btnUpload
              btnUpload = (Button) convertView.findViewById(R.id.btnUpload);
              btnUpload.setTextColor(Color.BLACK);
              btnUpload.setTag(strPath);
              btnUpload.setOnClickListener(new View.OnClickListener() {
  
  
              @SuppressWarnings("deprecation")
              public void onClick(View v) {                   
                  // Upload
  
                  fileName=ImageList.get(position).toString().substring(strPath.lastIndexOf('/')+1, strPath.length());
  
                  }
              });     
  
  
  
      //Upload
      public void startUpload(final int position) {      
          Runnable runnable = new Runnable() {
  
              public void run() {
                  handler.post(new Runnable() {
                      public void run() {
                          View v = lstView.getChildAt(position - lstView.getFirstVisiblePosition());
                          // Show ProgressBar
                          ProgressBar progress = (ProgressBar)v.findViewById(R.id.progressBar);
                          progress.setVisibility(View.VISIBLE);
  
                          //  Status  
                          TextView status = (TextView)v.findViewById(R.id.ColStatus);
                          status.setText("Uploading..");
  
                          new UploadFileAsync().execute(String.valueOf(position));   
                      }
                  }); 
              }
          };
          new Thread(runnable).start();
      }
  
  
      // Async Upload
      public class UploadFileAsync extends AsyncTask&lt;String, Void, Void&gt; {
  
          String resServer;
          int position;           
  
          protected void onPreExecute() {
  
              super.onPreExecute();               
          }
  
          @Override
          protected Void doInBackground(String... params) {
              //  TODO Auto-generated method stub
  
              int position;
  
              position = Integer.parseInt(params[0]);
              Log.d("position::", " " + position);
  
              int bytesRead, bytesAvailable, bufferSize;
              byte[] buffer;
              int maxBufferSize = 1 * 1024 * 1024;
              int resCode = 0;
              String resMessage = "";
  
              String lineEnd = "\r\n";
              String twoHyphens = "--";
              String boundary =  "*****";
              String strSDPath;
  
              //  File Path
              strSDPath = ImageList.get(position).toString();
  
              // Upload to PHP Script
              String strUrlServer = "http://10.0.2.2/res/files.php";              
  
              try {
                  /** Check file on SD Card ***/
                  File file = new File(strSDPath);
                  if(!file.exists())
                  {
                      resServer = "{\"StatusID\":\"0\",\"Error\":\"Please check path on SD Card\"}";
                      return null;
                  }
  
                  FileInputStream fileInputStream = new FileInputStream(new File(strSDPath));
  
                  URL url = new URL(strUrlServer);
                  HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                  conn.setDoInput(true);  
                  conn.setDoOutput(true);
                  conn.setUseCaches(false);
                  conn.setRequestMethod("POST");
  
                  conn.setRequestProperty("Connection", "Keep-Alive");
                  conn.setRequestProperty("Content-Type",
                          "multipart/form-data;boundary=" + boundary);
  
                  DataOutputStream outputStream = new DataOutputStream(conn
                          .getOutputStream());
                  outputStream.writeBytes(twoHyphens + boundary + lineEnd);
                  outputStream
                  .writeBytes("Content-Disposition: form-data; name=\"filUpload\";filename=\""
                          + strSDPath + "\"" + lineEnd);
                  outputStream.writeBytes(lineEnd);
  
                  bytesAvailable = fileInputStream.available();
                  bufferSize = Math.min(bytesAvailable, maxBufferSize);
                  buffer = new byte[bufferSize];
  
                  // Read file
                  bytesRead = fileInputStream.read(buffer, 0, bufferSize);
  
                  while (bytesRead &gt; 0) {
                      outputStream.write(buffer, 0, bufferSize);
                      bytesAvailable = fileInputStream.available();
                      bufferSize = Math.min(bytesAvailable, maxBufferSize);
                      bytesRead = fileInputStream.read(buffer, 0, bufferSize);
                  }
  
                  outputStream.writeBytes(lineEnd);
                  outputStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
  
                  // Response Code and  Message
                  resCode = conn.getResponseCode();
                  if(resCode == HttpURLConnection.HTTP_OK)
                  {
                      InputStream is = conn.getInputStream();
                      ByteArrayOutputStream bos = new ByteArrayOutputStream();
  
                      int read = 0;
                      while ((read = is.read()) != -1) {
                          bos.write(read);
                      }
                      byte[] result = bos.toByteArray();
                      bos.close();
  
                      resMessage = new String(result);
                  }
  
                  Log.d("resCode=",Integer.toString(resCode));
                  Log.d("resMessage=",resMessage.toString());
  
                  fileInputStream.close();
                  outputStream.flush();
                  outputStream.close();
  
                  resServer = resMessage.toString();
  
              } catch (Exception ex) {
                  // Exception handling
                  return null;
              }
              return null;
          }
  
          protected void onPostExecute(Void unused) {
              statusWhenFinish(position,resServer);
          }
      }
  
      // when upload finish
      protected void statusWhenFinish(int position, String resServer) {
  
          View v = lstView.getChildAt(position - lstView.getFirstVisiblePosition());
  
          // Show ProgressBar
          ProgressBar progress = (ProgressBar)v.findViewById(R.id.progressBar);
          progress.setVisibility(View.GONE);
  
          // Status
          TextView status = (TextView)v.findViewById(R.id.ColStatus);
          /*** Default Value ***/
          String strStatusID = "0";
          String strMessage = "Unknow Status!";
  
          try {      
              JSONObject c = new JSONObject(resServer);
              strStatusID = c.getString("StatusID");
              strMessage = c.getString("Message");
          } catch (JSONException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }
  
          // Prepare Status       
          if(strStatusID.equals("0"))
          {
              // When update Failed
              status.setText( strMessage );
              status.setTextColor(Color.RED);
  
              // Enabled Button again
              Button btnUpload = (Button) v.findViewById(R.id.btnUpload);
              btnUpload.setText("Already Uploaded");
              btnUpload.setTextColor(Color.RED);
              btnUpload.setEnabled(true);
          }
          else
          {
              status.setText("Upload Completed");
              status.setTextColor(Color.GREEN);
          }
      }
  </code></pre>
  
  <p><strong>activity_column.xml:</strong></p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="horizontal"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"&gt;
  
  &lt;ImageView
  android:id="@+id/ColImgPath"
  android:layout_width="110dp"
  android:layout_height="110dp"
  /&gt;
  
  &lt;ProgressBar
  android:id="@+id/progressBar"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"/&gt;
  
  &lt;TableLayout
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"&gt;
  
  &lt;TableRow
  android:layout_width="wrap_content"
  android:layout_height="wrap_content" &gt;
  &lt;TextView
  android:id="@+id/ColImgName"
  android:text="Column 1" /&gt;
  
  
  &lt;/TableRow&gt;
  
  &lt;TableRow
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"&gt;
  
  &lt;TextView
  android:id="@+id/ColStatus"
  android:textAppearance="?android:attr/textAppearanceSmall"
  android:text="Status" /&gt;
  
  &lt;/TableRow&gt;
  
  &lt;TableRow
  android:layout_width="wrap_content"
  android:layout_height="wrap_content" &gt;
  
  &lt;Button
  android:id="@+id/btnUpload"
  style="?android:attr/buttonStyleSmall"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="Upload" /&gt;
  
  &lt;Button
  android:id="@+id/btnPrint"
  style="?android:attr/buttonStyleSmall"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="Print" /&gt;
  
  
  &lt;/TableRow&gt;
  
  &lt;/TableLayout&gt;
  
  &lt;/LinearLayout&gt;
  </code></pre>