Что не так с тем, как следующий код собирает данные и загружает их на веб-сайт? ⇐ JAVA
-
Гость
Что не так с тем, как следующий код собирает данные и загружает их на веб-сайт?
Это XML-код.
Это Java-код;
import android.content.Context; импортировать android.content.DialogInterface; импортировать android.content.Intent; импортировать android.content.pm.PackageManager; импортировать android.graphics.Bitmap; импортировать android.graphics.drawable.BitmapDrawable; импортировать android.location.Location; импортировать android.location.LocationManager; импортировать android.net.Uri; импортировать android.os.Bundle; импортировать android.provider.MediaStore; импортировать android.provider.Settings; импортировать android.util.Base64; импортировать android.util.Log; импортировать android.widget.EditText; импортировать android.widget.ImageView; импортировать android.widget.TextView; импортировать android.widget.Toast; импортировать androidx.appcompat.app.AlertDialog; импортировать androidx.appcompat.app.AppCompatActivity; импортировать androidx.core.app.ActivityCompat; импортировать android.Manifest; импортировать com.android.volley.Request; импортировать com.android.volley.RequestQueue; импортировать com.android.volley.toolbox.StringRequest; импортировать com.android.volley.toolbox.Volley; импортировать java.io.ByteArrayOutputStream; импортировать java.util.HashMap; импортировать java.util.Map; импортировать java.util.Objects; публичный класс AddPlaceActivity расширяет AppCompatActivity { частный статический окончательный int REQUEST_LOCATION = 1; Менеджер местоположенияМенеджер местоположения; общедоступная строка широта, долгота; частный статический финал int QUALITY_SETTING = 80; // Настраиваем качество по мере необходимости TextView imageofplace, загрузить сведения, showLocationlat, showLocationlong, getCurrentLocation, rtnmenu; ИзображениеView EditText описание1, название места; @Override protected void onCreate (Bundle saveInstanceState) { super.onCreate(saveInstanceState); setContentView(R.layout.activity_add_place); picofplace = findViewById(R.id.picofplace); //Imageview для отображения изображения Placename = findViewById(R.id.placename); //Использовать в качестве места назначения uploaddetails = findViewById(R.id.uploaddetails); // для загрузки деталей в wen Pictureofplace = findViewById(R.id.pictureofplace); //для получения изображения камеры или галереи getCurrentLocation = findViewById(R.id.get_location_button); // получаем текущее местоположение rtnmenu = findViewById(R.id.rtnmenu); ActivityCompat.requestPermissions(это, новая строка[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION); showLocationlat = findViewById(R.id.showlocationlat); showLocationlong = findViewById(R.id.showlocationlong); locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); если (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { Toast.makeText(this, "onGPS", Toast.LENGTH_LONG).show(); ОнGPS(); } еще { Toast.makeText(this, "getloc", Toast.LENGTH_LONG).show(); ПолучитьМестоположение(); } Pictureofplace.setOnClickListener(v -> selectImage()); uploaddetails.setOnClickListener(v -> uploadData()); getCurrentLocation.setOnClickListener(v -> getLocation()); rtnmenu.setOnClickListener(v -> { Намерение inst = новое намерение (AddPlaceActivity.this, MainMenuActivity.class); startActivity (инст); }); } частная пустота OnGPS() { окончательный построитель AlertDialog.Builder = новый AlertDialog.Builder(this); builder.setMessage("Включить GPS").setCancelable(false).setPositiveButton("Да", new DialogInterface.OnClickListener() { @Override public void onClick (диалог DialogInterface, int that) { startActivity (новое намерение (Settings.ACTION_LOCATION_SOURCE_SETTINGS)); } }).setNegativeButton("Нет", новый DialogInterface.OnClickListener() { @Override public void onClick (диалог DialogInterface, int that) { диалог.отмена(); } }); окончательный AlertDialog alertDialog = builder.create(); alertDialog.show(); } частная пустота getLocation() { если (ActivityCompat.checkSelfPermission( AddPlaceActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission( AddPlaceActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(это, новая строка[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION); } еще { Местоположение местоположения = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); если (местоположение == ноль) { // Попробуйте использовать сетевых провайдеров, если GPS не работает location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); } если (местоположение!= ноль) { двойная широта = location.getLatitude(); двойной longi = location.getLongitude(); широта = String.valueOf(широта); долгота = String.valueOf(longi); //showLocationlat.setText(getString(R.string.latitude) + широта); showLocationlat.setText(широта); //showLocationlong.setText(getString(R.string.longitude) + долгота); showLocationlong.setText(долгота); } еще { Toast.makeText(this, «Невозможно найти местоположение», Toast.LENGTH_SHORT).show(); //showLocationlat.setText("Местоположение недоступно"); showLocationlat.setText(R.string.locnotavailable); //showLocationlong.setText("Проверить разрешения");//getString(R.string.chkpermission) showLocationlong.setText(getString(R.string.chkpermission)); } } } частный недействительный selectImage() { Final CharSequence[] options = {"Сделать фотографию", "Выбрать из галереи", "Отмена"}; AlertDialog.Builder builder = новый AlertDialog.Builder(AddPlaceActivity.this); builder.setTitle("Добавить фото!"); builder.setItems(options, new DialogInterface.OnClickListener() { @Override public void onClick (диалог DialogInterface, элемент int) { if (options[item].equals("Сделать фотографию")) { Намерение намерение = новое намерение (MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult (намерение, 1); } else if (options[item].equals("Выбрать из галереи")) { Намерение намерение = новое намерение (Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult (намерение, 2); } else if (options[item].equals("Отмена")) { диалог.отклонить(); } } }); строитель.шоу(); } // Этот метод поможет получить изображение protected void onActivityResult (int requestCode, int resultCode, данные намерения) { super.onActivityResult(requestCode, resultCode, данные); // Сопоставляем идентификатор изображения запроса с кодом запроса если (код запроса == 1) { // BitMap — это структура данных файла изображения, в которой изображение хранится в памяти. Растровое фото = (Растровое изображение) Objects.requireNonNull(data.getExtras()).get("данные"); // Устанавливаем изображение в imageview для отображения picofplace.setImageBitmap(фото); } еще если (requestCode == 2) { Uri selectedImage = data.getData(); picofplace.setImageURI(selectedImage); } } частная пустота uploadData() { // Получаем местоположение (при условии, что оно уже реализовано) ПолучитьМестоположение(); // Динамический поиск EditTexts в случае изменения макета EditText Placename = findViewById(R.id.placename); EditText описание1 = findViewById(R.id.description1); пытаться { // Проверяем, инициализированы ли поля EditText перед доступом к тексту if (placename != null &&description1 != null && Placename.getText().length() > 0 &&description1.getText().length() > 0) { Назначение строки = Placename.getText().toString(); Описание строки = описание1.getText().toString(); // Получаем изображение и сжимаем его Растровое изображение = ((BitmapDrawable) picofplace.getDrawable()).getBitmap(); Строка encodedImage = compressImage(растровое изображение); // Создаём карту для параметров Параметры Map = new HashMap(); params.put("изображение", encodedImage); params.put("широта", String.valueOf(широта)); params.put("долгота", String.valueOf(долгота)); params.put("пункт назначения", пункт назначения); params.put("описание", описание); // Создаем запрос залпа Запрос StringRequest = новый StringRequest(Request.Method.POST, "https://www.example.com/upload.php", ответ -> { // Анализируем строку ответа на наличие ошибок если (response.contains("успех")) { // Загрузка успешна Toast.makeText(this, «Данные успешно загружены», Toast.LENGTH_LONG).show(); } еще { // Обрабатываем ошибку загрузки на сайте Toast.makeText(this, «Ошибка загрузки данных на сервер: » + ответ, Toast.LENGTH_LONG).show(); } }, ошибка -> { // Обработка сетевых ошибок или ошибок Volley Toast.makeText(this, «Ошибка загрузки данных», Toast.LENGTH_LONG).show(); }) { @Override protected Map getParams() { вернуть параметры; } }; // Добавляем запрос в очередь Volley Очередь RequestQueue = Volley.newRequestQueue(this); очередь.добавить (запрос); } еще { Toast.makeText(this, «Пожалуйста, введите название и описание места», Toast.LENGTH_LONG).show(); } } catch (Исключение е) { // Подробный журнал ошибок для отладки Log.e("UploadError", "Ошибка кодирования изображения: " + e.getMessage(), e); Toast.makeText(this, «Ошибка кодирования изображения», Toast.LENGTH_LONG).show(); Намерение inst = новое намерение (AddPlaceActivity.this, MainMenuActivity.class); startActivity (инст); } } частная строка encodeImageToBase64 (растровое изображение) { ByteArrayOutputStream baos = новый ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, баос); // Настраиваем качество по мере необходимости byte[] imageBytes = baos.toByteArray(); return Base64.encodeToString(imageBytes, Base64.DEFAULT); } частная строка compressImage (растровое изображение) { ByteArrayOutputStream baos = новый ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, QUALITY_SETTING, баос); // Настраиваем качество по мере необходимости byte[] compressedBytes = baos.toByteArray(); return Base64.encodeToString(compressedBytes, Base64.DEFAULT); } } Это код для обработки загрузки.
При запуске выдает следующую ошибку: - «Ошибка загрузки данных» Не могу найти причину ошибки.
Я использовал несколько искусственных интеллектов для диагностики проблемы, но ничего не помогло, так что ожидайте, что это что-то более фундаментальное.
Это XML-код.
Это Java-код;
import android.content.Context; импортировать android.content.DialogInterface; импортировать android.content.Intent; импортировать android.content.pm.PackageManager; импортировать android.graphics.Bitmap; импортировать android.graphics.drawable.BitmapDrawable; импортировать android.location.Location; импортировать android.location.LocationManager; импортировать android.net.Uri; импортировать android.os.Bundle; импортировать android.provider.MediaStore; импортировать android.provider.Settings; импортировать android.util.Base64; импортировать android.util.Log; импортировать android.widget.EditText; импортировать android.widget.ImageView; импортировать android.widget.TextView; импортировать android.widget.Toast; импортировать androidx.appcompat.app.AlertDialog; импортировать androidx.appcompat.app.AppCompatActivity; импортировать androidx.core.app.ActivityCompat; импортировать android.Manifest; импортировать com.android.volley.Request; импортировать com.android.volley.RequestQueue; импортировать com.android.volley.toolbox.StringRequest; импортировать com.android.volley.toolbox.Volley; импортировать java.io.ByteArrayOutputStream; импортировать java.util.HashMap; импортировать java.util.Map; импортировать java.util.Objects; публичный класс AddPlaceActivity расширяет AppCompatActivity { частный статический окончательный int REQUEST_LOCATION = 1; Менеджер местоположенияМенеджер местоположения; общедоступная строка широта, долгота; частный статический финал int QUALITY_SETTING = 80; // Настраиваем качество по мере необходимости TextView imageofplace, загрузить сведения, showLocationlat, showLocationlong, getCurrentLocation, rtnmenu; ИзображениеView EditText описание1, название места; @Override protected void onCreate (Bundle saveInstanceState) { super.onCreate(saveInstanceState); setContentView(R.layout.activity_add_place); picofplace = findViewById(R.id.picofplace); //Imageview для отображения изображения Placename = findViewById(R.id.placename); //Использовать в качестве места назначения uploaddetails = findViewById(R.id.uploaddetails); // для загрузки деталей в wen Pictureofplace = findViewById(R.id.pictureofplace); //для получения изображения камеры или галереи getCurrentLocation = findViewById(R.id.get_location_button); // получаем текущее местоположение rtnmenu = findViewById(R.id.rtnmenu); ActivityCompat.requestPermissions(это, новая строка[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION); showLocationlat = findViewById(R.id.showlocationlat); showLocationlong = findViewById(R.id.showlocationlong); locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); если (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { Toast.makeText(this, "onGPS", Toast.LENGTH_LONG).show(); ОнGPS(); } еще { Toast.makeText(this, "getloc", Toast.LENGTH_LONG).show(); ПолучитьМестоположение(); } Pictureofplace.setOnClickListener(v -> selectImage()); uploaddetails.setOnClickListener(v -> uploadData()); getCurrentLocation.setOnClickListener(v -> getLocation()); rtnmenu.setOnClickListener(v -> { Намерение inst = новое намерение (AddPlaceActivity.this, MainMenuActivity.class); startActivity (инст); }); } частная пустота OnGPS() { окончательный построитель AlertDialog.Builder = новый AlertDialog.Builder(this); builder.setMessage("Включить GPS").setCancelable(false).setPositiveButton("Да", new DialogInterface.OnClickListener() { @Override public void onClick (диалог DialogInterface, int that) { startActivity (новое намерение (Settings.ACTION_LOCATION_SOURCE_SETTINGS)); } }).setNegativeButton("Нет", новый DialogInterface.OnClickListener() { @Override public void onClick (диалог DialogInterface, int that) { диалог.отмена(); } }); окончательный AlertDialog alertDialog = builder.create(); alertDialog.show(); } частная пустота getLocation() { если (ActivityCompat.checkSelfPermission( AddPlaceActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission( AddPlaceActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(это, новая строка[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_LOCATION); } еще { Местоположение местоположения = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); если (местоположение == ноль) { // Попробуйте использовать сетевых провайдеров, если GPS не работает location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); } если (местоположение!= ноль) { двойная широта = location.getLatitude(); двойной longi = location.getLongitude(); широта = String.valueOf(широта); долгота = String.valueOf(longi); //showLocationlat.setText(getString(R.string.latitude) + широта); showLocationlat.setText(широта); //showLocationlong.setText(getString(R.string.longitude) + долгота); showLocationlong.setText(долгота); } еще { Toast.makeText(this, «Невозможно найти местоположение», Toast.LENGTH_SHORT).show(); //showLocationlat.setText("Местоположение недоступно"); showLocationlat.setText(R.string.locnotavailable); //showLocationlong.setText("Проверить разрешения");//getString(R.string.chkpermission) showLocationlong.setText(getString(R.string.chkpermission)); } } } частный недействительный selectImage() { Final CharSequence[] options = {"Сделать фотографию", "Выбрать из галереи", "Отмена"}; AlertDialog.Builder builder = новый AlertDialog.Builder(AddPlaceActivity.this); builder.setTitle("Добавить фото!"); builder.setItems(options, new DialogInterface.OnClickListener() { @Override public void onClick (диалог DialogInterface, элемент int) { if (options[item].equals("Сделать фотографию")) { Намерение намерение = новое намерение (MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult (намерение, 1); } else if (options[item].equals("Выбрать из галереи")) { Намерение намерение = новое намерение (Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult (намерение, 2); } else if (options[item].equals("Отмена")) { диалог.отклонить(); } } }); строитель.шоу(); } // Этот метод поможет получить изображение protected void onActivityResult (int requestCode, int resultCode, данные намерения) { super.onActivityResult(requestCode, resultCode, данные); // Сопоставляем идентификатор изображения запроса с кодом запроса если (код запроса == 1) { // BitMap — это структура данных файла изображения, в которой изображение хранится в памяти. Растровое фото = (Растровое изображение) Objects.requireNonNull(data.getExtras()).get("данные"); // Устанавливаем изображение в imageview для отображения picofplace.setImageBitmap(фото); } еще если (requestCode == 2) { Uri selectedImage = data.getData(); picofplace.setImageURI(selectedImage); } } частная пустота uploadData() { // Получаем местоположение (при условии, что оно уже реализовано) ПолучитьМестоположение(); // Динамический поиск EditTexts в случае изменения макета EditText Placename = findViewById(R.id.placename); EditText описание1 = findViewById(R.id.description1); пытаться { // Проверяем, инициализированы ли поля EditText перед доступом к тексту if (placename != null &&description1 != null && Placename.getText().length() > 0 &&description1.getText().length() > 0) { Назначение строки = Placename.getText().toString(); Описание строки = описание1.getText().toString(); // Получаем изображение и сжимаем его Растровое изображение = ((BitmapDrawable) picofplace.getDrawable()).getBitmap(); Строка encodedImage = compressImage(растровое изображение); // Создаём карту для параметров Параметры Map = new HashMap(); params.put("изображение", encodedImage); params.put("широта", String.valueOf(широта)); params.put("долгота", String.valueOf(долгота)); params.put("пункт назначения", пункт назначения); params.put("описание", описание); // Создаем запрос залпа Запрос StringRequest = новый StringRequest(Request.Method.POST, "https://www.example.com/upload.php", ответ -> { // Анализируем строку ответа на наличие ошибок если (response.contains("успех")) { // Загрузка успешна Toast.makeText(this, «Данные успешно загружены», Toast.LENGTH_LONG).show(); } еще { // Обрабатываем ошибку загрузки на сайте Toast.makeText(this, «Ошибка загрузки данных на сервер: » + ответ, Toast.LENGTH_LONG).show(); } }, ошибка -> { // Обработка сетевых ошибок или ошибок Volley Toast.makeText(this, «Ошибка загрузки данных», Toast.LENGTH_LONG).show(); }) { @Override protected Map getParams() { вернуть параметры; } }; // Добавляем запрос в очередь Volley Очередь RequestQueue = Volley.newRequestQueue(this); очередь.добавить (запрос); } еще { Toast.makeText(this, «Пожалуйста, введите название и описание места», Toast.LENGTH_LONG).show(); } } catch (Исключение е) { // Подробный журнал ошибок для отладки Log.e("UploadError", "Ошибка кодирования изображения: " + e.getMessage(), e); Toast.makeText(this, «Ошибка кодирования изображения», Toast.LENGTH_LONG).show(); Намерение inst = новое намерение (AddPlaceActivity.this, MainMenuActivity.class); startActivity (инст); } } частная строка encodeImageToBase64 (растровое изображение) { ByteArrayOutputStream baos = новый ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, баос); // Настраиваем качество по мере необходимости byte[] imageBytes = baos.toByteArray(); return Base64.encodeToString(imageBytes, Base64.DEFAULT); } частная строка compressImage (растровое изображение) { ByteArrayOutputStream baos = новый ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, QUALITY_SETTING, баос); // Настраиваем качество по мере необходимости byte[] compressedBytes = baos.toByteArray(); return Base64.encodeToString(compressedBytes, Base64.DEFAULT); } } Это код для обработки загрузки.
При запуске выдает следующую ошибку: - «Ошибка загрузки данных» Не могу найти причину ошибки.
Я использовал несколько искусственных интеллектов для диагностики проблемы, но ничего не помогло, так что ожидайте, что это что-то более фундаментальное.
Мобильная версия