I am working on encoding the selected image from the gallery and want to send it to the server. I managed to send the name and description of the product, which is a text form. but I donโt know how to encode the image and send it to the lowercase form. On the server side, I need to decrypt it using php. My code ...
public class AddEditWishlists extends Activity { // Client-Server - Start ////////////////////// JSONParser jsonParser = new JSONParser(); // url to create new product private static String url_create_product = "http://10.56.43.91/android_connect/create_product.php"; // JSON Node names private static final String TAG_SUCCESS = "success"; InputStream is; // Client-Server - End ////////////////////// //Define Variables private EditText inputname; private EditText inputnote; private Button upload; private Bitmap yourSelectedImage; private ImageView inputphoto; private Button save; private int id; private byte[] blob=null; byte[] image=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.add_wishlist); setUpViews(); } private void setUpViews() { inputname = (EditText) findViewById(R.id.inputname); inputnote = (EditText) findViewById(R.id.inputnote); inputphoto = (ImageView) findViewById(R.id.inputphoto); Bundle extras = getIntent().getExtras(); if (extras != null) { id=extras.getInt("id"); inputname.setText(extras.getString("name")); inputnote.setText(extras.getString("note")); image = extras.getByteArray("blob"); String encodedImage = Base64.encodeToString(image , Base64.DEFAULT); if (image != null) { if (image.length > 3) { inputphoto.setImageBitmap(BitmapFactory.decodeByteArray(image,0,image.length)); } } } //Image Upload Button upload = (Button) findViewById(R.id.upload); upload.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("image/*"); startActivityForResult(intent, 0); } }); // Save the data save = (Button) findViewById(R.id.save); // Saveํ๋ฉด ๋ฐ์๋๋ ์ด๋ฒคํธ save.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (inputname.getText().length() != 0) { AsyncTask<Object, Object, Object> saveContactTask = new AsyncTask<Object, Object, Object>() { @Override protected Object doInBackground(Object... params) { saveContact(); // Client-Server - Start ////////////////////////////////////// String name = inputname.getText().toString(); String description = inputnote.getText().toString(); //String photo = inputphoto.getContext().toString(); encodedImage = yourSelectedImage.toString(); // Building Parameters List<NameValuePair> params1 = new ArrayList<NameValuePair>(); params1.add(new BasicNameValuePair("name", name)); params1.add(new BasicNameValuePair("description", description)); params1.add(new BasicNameValuePair("photo", encodedImage)); Log.v("log_tag", System.currentTimeMillis()+".jpg"); // getting JSON Object // Note that create product url accepts POST method JSONObject json = jsonParser.makeHttpRequest(url_create_product, "POST", params1); // check log cat fro response Log.d("Create Response", json.toString()); // check for success tag try { int success = json.getInt(TAG_SUCCESS); Log.v("log_tag", "In the try Loop" ); if (success == 1) { // closing this screen finish(); } else { // failed to create product } } catch (JSONException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(Object result) { finish(); } }; saveContactTask.execute((Object[]) null); } else { AlertDialog.Builder alert = new AlertDialog.Builder( AddEditWishlists.this); alert.setTitle("Error In Save Wish List"); alert.setMessage("You need to Enter Name of the Product"); alert.setPositiveButton("OK", null); alert.show(); } } }); } // If users save data, this will act (data -> db) private void saveContact() { if(yourSelectedImage!=null){ ByteArrayOutputStream outStr = new ByteArrayOutputStream(); yourSelectedImage.compress(CompressFormat.JPEG, 100, outStr); blob = outStr.toByteArray(); } else{blob=image;} // Change Text type to string type to save in the DB SQLiteConnector sqlCon = new SQLiteConnector(this); if (getIntent().getExtras() == null) { sqlCon.insertWishlist(inputname.getText().toString(), inputnote.getText().toString(), blob); } else { sqlCon.updateWishlist(id, inputname.getText().toString(), inputnote.getText().toString(), blob); } } @Override protected void onActivityResult(int requestCode, int resultCode,Intent resultdata) { super.onActivityResult(requestCode, resultCode, resultdata); switch (requestCode) { case 0: if (resultCode == RESULT_OK) { Uri selectedImage = resultdata.getData(); String[] filePathColumn = { MediaStore.Images.Media.DATA }; Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); String filePath = cursor.getString(columnIndex); cursor.close(); // Convert file path into bitmap image using below line. yourSelectedImage = BitmapFactory.decodeFile(filePath); inputphoto.setImageBitmap(yourSelectedImage); } } }
what i'm working on is part of here.
if (extras != null) { id=extras.getInt("id"); inputname.setText(extras.getString("name")); inputnote.setText(extras.getString("note")); image = extras.getByteArray("blob"); //Here..I encoded the image ***********Is it correct?********** String encodedImage = Base64.encodeToString(image , Base64.DEFAULT); if (image != null) { if (image.length > 3) { inputphoto.setImageBitmap(BitmapFactory.decodeByteArray(image,0,image.length)); } } }
and...
// Client-Server - Start ////////////////////////////////////// String name = inputname.getText().toString(); String description = inputnote.getText().toString(); // this line should be modified i guess.... String encodedImage = yourSelectedImage.toString(); // Building Parameters List<NameValuePair> params1 = new ArrayList<NameValuePair>(); params1.add(new BasicNameValuePair("name", name)); params1.add(new BasicNameValuePair("description", description)); // This line should be modified i guess.. params1.add(new BasicNameValuePair("photo", encodedImage)); Log.v("log_tag", System.currentTimeMillis()+".jpg"); // getting JSON Object // Note that create product url accepts POST method JSONObject json = jsonParser.makeHttpRequest(url_create_product, "POST", params1); // check log cat fro response Log.d("Create Response", json.toString());
I wrote an annotation where I need to fix it .... I think this part makes a mistake.
and another question is, on the server side, how should the format be for receiving an encoded photo? Varchar? char? ..
Thanks in advance.