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);//запускаем передачу данныха на сервер.
}
//--------------------------------------------------------------------------------------------------------- загрузка производителя ссервера