private String getPostDataString(HashMap<String, String> params) throws UnsupportedEncodingException {//функция формирования POST данных для отправки на сервер StringBuilder result = new StringBuilder(); boolean first = true; for(Map.Entry<String, String> entry : params.entrySet()){ if (first) first = false; else result.append("&"); result.append(URLEncoder.encode(entry.getKey(), "UTF-8")); result.append("="); result.append(URLEncoder.encode(entry.getValue(), "UTF-8")); } return result.toString();//возвращаем сформированную строку для POST данных которые будут отправляться на сервер rateandshare.kz } //--------------------------------Загрузка изображения-------------------------------- private class DownloadWebPageTask1 extends AsyncTask<ImageAndName, Void, String> {//загрузка изображения на сервер String attachmentName = "bitmap";//имя прикрепленных данных String attachmentFileName = "bitmap.jpg";//имя файла String crlf = "\r\n";//символ перехода на новую строку String twoHyphens = "--";//спец символы для создания POST запроса String boundary = "*****";//спец символы для создания POST запроса @Override protected String doInBackground(ImageAndName... params) { URL url = null; String response = ""; String requestURL="android.gorodmoy.com";//адрес куда мы будем отправлять POST данные для обработки try { url = new URL(requestURL);//создаем объект url из строкового типа requestURL //сохранение данных в из картинки в массив Bitmap bmp = params[0].Bmp;//Получаем изображение которое мы сфотографировали String Name=params[0].Name;//Получаем имя изображения которое состоит из времени когда была сделагна фотография и идентификатора телефона attachmentFileName=Name+".jpg";//добавляем расширение файла ByteArrayOutputStream stream = new ByteArrayOutputStream();//создаем объект для передачи потоковых бинарных данных. Это используется для передачи изображений bmp.compress(Bitmap.CompressFormat.JPEG, 100, stream);//преобразуем наше изображение из BMP формата в JPEG byte[] byteArray = stream.toByteArray();//Преобразуем изображение в массив байтов //передача данных HttpURLConnection httpUrlConnection = null;//объявляем объект для создания интернет соединения httpUrlConnection = (HttpURLConnection) url.openConnection();// открываем соединени с сайтом httpUrlConnection.setUseCaches(false); // запрещаем использовать кэширования. httpUrlConnection.setDoOutput(true);//разрешаем использование POST запросов (в нашем случае для передачи изображения) httpUrlConnection.setRequestMethod("POST");//устанавливаем метод передачи данных httpUrlConnection.setRequestProperty("Connection", "Keep-Alive");// настройка соединения для повторного использования соединений HTTP httpUrlConnection.setRequestProperty("Cache-Control", "no-cache");//запрет на кэширование httpUrlConnection.setRequestProperty( "Content-Type", "multipart/form-data;boundary=" + this.boundary);//настройка POST данных для передачи данных частями. Используется при передачи больших объемов данных. DataOutputStream request = new DataOutputStream( httpUrlConnection.getOutputStream());//создаем объект для передачи данных request.writeBytes(this.twoHyphens + this.boundary + this.crlf);//начинаем запись POST данных по стандарту. Формируем POST запрос request.writeBytes("Content-Disposition: form-data; name=\"" + this.attachmentName + "\";filename=\"" + this.attachmentFileName + "\"" + this.crlf); request.writeBytes(this.crlf); request.write(byteArray); request.writeBytes(this.crlf); request.writeBytes(this.twoHyphens + this.boundary + this.twoHyphens + this.crlf); request.flush(); request.close();//закрываем запрос InputStream responseStream = new BufferedInputStream(httpUrlConnection.getInputStream());//получаем ответ от сервера BufferedReader responseStreamReader = new BufferedReader(new InputStreamReader(responseStream)); String line = ""; StringBuilder stringBuilder = new StringBuilder(); while ((line = responseStreamReader.readLine()) != null) {//читаем данные с сервера stringBuilder.append(line).append("\n"); } responseStreamReader.close(); response = stringBuilder.toString(); responseStream.close(); httpUrlConnection.disconnect(); } catch (Exception e) { Toast toast = Toast.makeText(getApplicationContext(),// если произошли ошибки при передаче данных то мы выводим сообщение об ошибке "Произошла ошибка при загрузке отзыва на сайт. Попробуйте еще раз!", Toast.LENGTH_LONG); toast.show(); e.printStackTrace(); } return response;//возвращаем ответ сервера. } @Override protected void onPostExecute(String result) {//обрабатываем ответ сервера при успешной загрузке данных Toast toast = Toast.makeText(getApplicationContext(),// если произошли ошибки при передаче данных то мы выводим сообщение об ошибке "Спасибо вам за отзыв. Ваш отзыв успешно загружен на сайт rateandshare.kz!", Toast.LENGTH_LONG); toast.show(); } } //--------------------------------Загрузка описания и кода-------------------------------- private class ImageAndName // Создаем свой класс в котором будет находиться имя картинки и сама картинка. Это необходимо для того чтобы передать данные на сервер в одном объекте { String Name; Bitmap Bmp; } private class DownloadWebPageTask extends AsyncTask<String, Void, String> {//класс для передачи данных на сервер в асинхронном режиме. @Override protected String doInBackground(String... params) {//выполнение фонового асинхронного задания. В нашем случае используется для передачи данных на сервер URL url = null;//создаем объект в котором будет храниться адрес страницы на которую мы будем отправлять POST данные String response = "";//Переменная для хранения ответа сервера String requestURL=params[0];//Адрес в интернет на который мы будем передвать пост данные try { url = new URL(requestURL);//Создаем объект адреса в интернет HttpURLConnection conn = (HttpURLConnection) url.openConnection();//открываем соединение с веб страницей conn.setReadTimeout(15000);//устанавливаем таймаут ответа сервера в процессе чтения страницы на 15 секунд conn.setConnectTimeout(15000);//Устанавливаем таймаут времени соединения с сервером на 15 секунд conn.setRequestMethod("POST");//Задаем метод передачи данных POST conn.setDoInput(true);//Разрешаем передачу данных на сервер conn.setDoOutput(true);//Разрешаем прием данных с сервера OutputStream os = conn.getOutputStream();//Объявляем объет для передачи данных на сервер BufferedWriter writer = new BufferedWriter(//инициализируем объект для записи данных на сервер new OutputStreamWriter(os, "UTF-8")); HashMap<String, String> postDataParams;//Объявляем объект для хранения передаваемых данных postDataParams=new HashMap<String, String>();//инициализируем объект для хранения передаваемых данных //Add Key/Value pairs postDataParams.put("name", params[1]);//Задаем значения POST данных postDataParams.put("imei", params[2]); writer.write(getPostDataString(postDataParams));//Передаем данные на сервер writer.flush();//Сохранить данные из кэша writer.close();//завершить передачу данных на свервер os.close();//Завершить соединение с сервером int responseCode=conn.getResponseCode();//получить код отвечающий за результат соединения if (responseCode == HttpsURLConnection.HTTP_OK) {//если все прошло успешно String line;//переменная в которой будем записывать ответ сервера BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream()));//создаем объект чтения данных с сервера while ((line=br.readLine()) != null) {//читаем пока есть данные response+=line; } } else { response="";// в случае ошибки отвер пустой. } } catch (Exception e) { e.printStackTrace();//стандартный обработчик исключений } return response;//возвращаем ответ сервера } @Override protected void onPostExecute(String result) { //productDescription.setText(result); } } public void downloadWebpage() { //--------Загрузка текстовых данных-------------- TelephonyManager telephonyManager = (TelephonyManager) getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);//создаем объект для получения imei кода который будем использовать как идентификатор пользователя String imei = telephonyManager.getDeviceId();//получаем imei код String S1;//объявляем переменные в которых будем хранить параметры передаваемые на сервер S1="Алексей Каверин"; try { S1 = URLEncoder.encode(S1, "UTF-8");//кодируем данные для передачи на сервер } catch (Exception e) { // произошла ошибка. Toast toast = Toast.makeText(getApplicationContext(),// если произошли ошибки при передаче данных то мы выводим сообщение об ошибке "Возникла ошибка при передаче данных на сервер. Проверьте подключение к интернет и повторите отправку.", Toast.LENGTH_LONG); toast.show(); } DownloadWebPageTask task = new DownloadWebPageTask();//создаем объект для загрузки данных на сервер task.execute(new String[]{"http://android.gorodmoy.com", S1, imei});//запускаем загружку данных на сервер //---------------Загрузка изображения // DownloadWebPageTask1 task1 = new DownloadWebPageTask1();//создаем объект для загурзки изображения на сервер // ImageAndName IMN = new ImageAndName();//создаем объект в котором будем хранить фото и имя файла //IMN.Bmp = myphoto;//записываем фото // IMN.Name = S5;//записываем имя файла // task1.execute(IMN);//запускаем передачу данныха на сервер. } //--------------------------------------------------------------------------------------------------------- загрузка производителя ссервера