I am still a beginner of Andorid programming and would need some help to the following:
What I currently have are 2 codes, which the first uploads an image to the server and stores the path into a MySQL table. The second code stores 2 EditText field values into a MySQL database table. What I actually want is to combine both codes, so it should be possible to upload an image to the server and then store the associated string path with 2 EditText field values into a MySQL database table at once.
1.) For uploading image and to store the string path into MySQL table I have following codes:
-Upload Image to server (JAVA side):
public class MainActivity extends Activity implements OnClickListener { private TextView messageText; private Button uploadButton, btnselectpic; private ImageView imageview; private int serverResponseCode = 0; private ProgressDialog dialog = null; private String upLoadServerUri = null; private String imagepath = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); uploadButton = (Button) findViewById(R.id.uploadButton); btnselectpic = (Button) findViewById(R.id.button_selectpic); messageText = (TextView) findViewById(R.id.messageText); imageview = (ImageView) findViewById(R.id.imageView_pic); btnselectpic.setOnClickListener(this); uploadButton.setOnClickListener(this); upLoadServerUri = "http://10.0.2.2/uploads/UploadToServer.php"; ImageView img = new ImageView(this); } @Override public void onClick(View arg0) { if (arg0 == btnselectpic) { Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult( Intent.createChooser(intent, "Complete action using"), 1); } else if (arg0 == uploadButton) { dialog = ProgressDialog.show(MainActivity.this, "", "Uploading file...", true); messageText.setText("uploading started....."); new Thread(new Runnable() { public void run() { uploadFile(imagepath); } }).start(); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1 && resultCode == RESULT_OK) { // Bitmap photo = (Bitmap) data.getData().getPath(); Uri selectedImageUri = data.getData(); imagepath = getPath(selectedImageUri); Bitmap bitmap = BitmapFactory.decodeFile(imagepath); imageview.setImageBitmap(bitmap); messageText.setText("Uploading file path:" + imagepath); } } public String getPath(Uri uri) { String[] projection = { MediaStore.Images.Media.DATA }; Cursor cursor = managedQuery(uri, projection, null, null, null); int column_index = cursor .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); } public int uploadFile(String sourceFileUri) { String fileName = sourceFileUri; HttpURLConnection conn = null; DataOutputStream dos = null; String lineEnd = "rn"; String twoHyphens = "--"; String boundary = "*****"; int bytesRead, bytesAvailable, bufferSize; byte[] buffer; int maxBufferSize = 1 * 1024 * 1024; File sourceFile = new File(sourceFileUri); if (!sourceFile.isFile()) { dialog.dismiss(); Log.e("uploadFile", "Source File not exist :" + imagepath); runOnUiThread(new Runnable() { public void run() { messageText.setText("Source File not exist :" + imagepath); } }); return 0; } else { try { // open a URL connection to the Servlet FileInputStream fileInputStream = new FileInputStream( sourceFile); URL url = new URL(upLoadServerUri); // Open a HTTP connection to the URL conn = (HttpURLConnection) url.openConnection(); conn.setDoInput(true); // Allow Inputs conn.setDoOutput(true); // Allow Outputs conn.setUseCaches(false); // Don't use a Cached Copy conn.setRequestMethod("POST"); conn.setRequestProperty("Connection", "Keep-Alive"); conn.setRequestProperty("ENCTYPE", "multipart/form-data"); conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); conn.setRequestProperty("uploaded_file", fileName); dos = new DataOutputStream(conn.getOutputStream()); dos.writeBytes(twoHyphens + boundary + lineEnd); dos.writeBytes("Content-Disposition: form-data; name="uploaded_file";filename="" + fileName + """ + lineEnd); dos.writeBytes(lineEnd); // create a buffer of maximum size bytesAvailable = fileInputStream.available(); bufferSize = Math.min(bytesAvailable, maxBufferSize); buffer = new byte[bufferSize]; // read file and write it into form... bytesRead = fileInputStream.read(buffer, 0, bufferSize); while (bytesRead > 0) { dos.write(buffer, 0, bufferSize); bytesAvailable = fileInputStream.available(); bufferSize = Math.min(bytesAvailable, maxBufferSize); bytesRead = fileInputStream.read(buffer, 0, bufferSize); } // send multipart form data necesssary after file data... dos.writeBytes(lineEnd); dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); // Responses from the server (code and message) serverResponseCode = conn.getResponseCode(); String serverResponseMessage = conn.getResponseMessage(); Log.i("uploadFile", "HTTP Response is : " + serverResponseMessage + ": " + serverResponseCode); if (serverResponseCode == 200) { runOnUiThread(new Runnable() { public void run() { String msg = "File Upload Completed.nn See uploaded file here : nn" + " F:/wamp/wamp/www/uploads"; messageText.setText(msg); Toast.makeText(MainActivity.this, "File Upload Complete.", Toast.LENGTH_SHORT) .show(); } }); } // close the streams // fileInputStream.close(); dos.flush(); dos.close(); } catch (MalformedURLException ex) { dialog.dismiss(); ex.printStackTrace(); runOnUiThread(new Runnable() { public void run() { messageText .setText("MalformedURLException Exception : check script url."); Toast.makeText(MainActivity.this, "MalformedURLException", Toast.LENGTH_SHORT) .show(); } }); Log.e("Upload file to server", "error: " + ex.getMessage(), ex); } catch (Exception e) { dialog.dismiss(); e.printStackTrace(); runOnUiThread(new Runnable() { public void run() { messageText.setText("Got Exception : see logcat "); Toast.makeText(MainActivity.this, "Got Exception : see logcat ", Toast.LENGTH_SHORT).show(); } }); Log.e("Upload file to server Exception", "Exception : " + e.getMessage(), e); } dialog.dismiss(); return serverResponseCode; } // End else block } }
-Upload Image to server and store string path (PHP side):
$file_path = "uploads/"; $file_path = $file_path . basename( $_FILES['uploaded_file']['name']); if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $file_path)) { // replace $host,$username,$password,$dbname with real info $link=mysqli_connect($host,$username,$password,$dbname); mysqli_query($link,"INSERT INTO `files` (filename,path) VALUES ('".$_FILES['uploaded_file']['tmp_name']."','".$file_path."')") or trigger_error($link->error."[ $sql]"); mysqli_close($link); } else{ echo "fail";
2.) For inserting EditText values from Android to MySQL Database I have following codes:
-Insert values to MySQL database table (JAVA side):
public class MainActivity extends Activity { String name; String id; InputStream is=null; String result=null; String line=null; int code; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final EditText e_id=(EditText) findViewById(R.id.editText1); final EditText e_name=(EditText) findViewById(R.id.editText2); Button insert=(Button) findViewById(R.id.button1); insert.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub id = e_id.getText().toString(); name = e_name.getText().toString(); insert(); } }); } public void insert() { ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("id",id)); nameValuePairs.add(new BasicNameValuePair("name",name)); try { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://10.0.2.2/insert.php"); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); is = entity.getContent(); Log.e("pass 1", "connection success "); } catch(Exception e) { Log.e("Fail 1", e.toString()); Toast.makeText(getApplicationContext(), "Invalid IP Address", Toast.LENGTH_LONG).show(); } try { BufferedReader reader = new BufferedReader (new InputStreamReader(is,"iso-8859-1"),8); StringBuilder sb = new StringBuilder(); while ((line = reader.readLine()) != null) { sb.append(line + "n"); } is.close(); result = sb.toString(); Log.e("pass 2", "connection success "); } catch(Exception e) { Log.e("Fail 2", e.toString()); } try { JSONObject json_data = new JSONObject(result); code=(json_data.getInt("code")); if(code==1) { Toast.makeText(getBaseContext(), "Inserted Successfully", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getBaseContext(), "Sorry, Try Again", Toast.LENGTH_LONG).show(); } } catch(Exception e) { Log.e("Fail 3", e.toString()); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } }
-Insert values to MySQL database table (PHP side):
<?php $host='127.0.0.1'; $uname='root'; $pwd='password'; $db="android"; $con = mysql_connect($host,$uname,$pwd) or die("connection failed"); mysql_select_db($db,$con) or die("db selection failed"); $id=$_REQUEST['id']; $name=$_REQUEST['name']; $flag['code']=0; if($r=mysql_query("insert into sample values('$id','$name') ",$con)) { $flag['code']=1; echo"hi"; } print(json_encode($flag)); mysql_close($con); ?>
HOW CAN I COMBINE 1.) and 2.)? I tried it almost 3 days but it simply does not work and I despair :S. Hope somebody can help.
Thanks in advance.
Advertisement
Answer
Combine these two code file in same activity first by calling them in two different functions and on uploading image file take image name from imagepath string using substring function and send that image name along with JSON data and in server side while inserting store that image path in the format ip_address/image_upload_folder/imagename.