Ответы пользователя по тегу Java
  • Как загружать файлы, чтобы иметь к ним доступ потом?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Здравствуйте!
    Вы загружаете файлы в директорию resources, но чтобы они были доступны вам нужно перекомпилировать проект заново. Обычно, если в приложении подразумевается какая-то логика загрузки файла, то файлы загружаются в другую директорию вне проекта. Например, /home/example.com/uploads А путь к файлу и т.д. храниться в БД. При надобности можно обращаться к БД и доставать путь к файлу с названием и отдавать на клиент. Если об этом речь....
    Ответ написан
    Комментировать
  • Вывести в отдельный поток коннект к сайту?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Здравствуйте!
    У вас получается, что при создании активити (в методе onCreate() ) вызывается метод loadData(), который используя Jsoup парсит данные.
    Можно метод loadData() вывести в класс, который имплементирует интерфейс Runnable и выполнять этот метод в отдельном потоке. Можно также выполнять метод асинхронно.
    Ответ написан
    1 комментарий
  • Почему в Java есть метки, но нету оператора goto?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Оператор goto может совершить переход в любую точку программы, в то время как оператор break ваша_метка; может быть использована для быстрого выхода из двух и более циклов. Именно из-за этого использовать метку с оператором break вы можете в циклах, а не везде, в отличие goto. Насколько мне известно, использование метки не является правилом хорошего тона в Java и скорее всего код можно рефакторить так, чтобы у вас не было кучи вложенностей циклов.
    Ответ написан
    Комментировать
  • Как реализовать оплату с помощью Stripe в android?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Смотрел и пробовал по официальной документации - не получилось.

    Нуу... слава Богу сейчас довольно много источников, где можно найти исходники и т.д. Но не думаю, что вы найдете материала лучше, чем оф. документация.

    Так что ж у вас не получилось-то?
    Ответ написан
  • Стрелочная функция?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    auth.getAuthorities().forEach(a -> System.out.println(a.getAuthority()));

    как-то так:
    for (Authority a : auth.getAuthorities()) {
    System.out.println(a.getAuthority());
    }
    Ответ написан
    4 комментария
  • Как подменить схему базы данных в Entity Hibernate?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Здравствуйте!
    Если я правильно понял, то у вас есть база, в которой есть 2 схемы. И в зависимости от профиля вы хотите переключать схемы?

    Я вижу тут пару вариантов:
    1) на уровне gradle || maven определить схемы.
    https://stackoverflow.com/questions/47240702/jpa-e...
    https://stackoverflow.com/questions/1149352/using-...
    <profiles>
        <profile>
          <id>production</id>
          <properties>
            <schema.name>production_schema_name</schema.name>
          </properties>
        </profile>
        <profile>
          <id>test</id>
          <properties>
            <schema.name>test_schema_name</schema.name>
          </properties>
        </profile>
    </profiles>

    2) использовать различные БД для разных профилей. Т.е. создать 2 БД по одной для каждого профиля.
    3) Создать 2 пакета (dev, prod) с сущностями, где для каждой из сущностей указывать:
    Для сущностей development
    @Table(name = "VALUES", schema = "DEV").
    Для сущностей production
    @Table(name = "VALUES", schema = "PROD").
    Ну и использовать аннотацию @Profile
    Ответ написан
    Комментировать
  • Как добавить данные с удалённого сервера в post запрос?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Здравствуйте!
    Есть post запрос который отправляет тело запроса. Данный запрос отправляется с помощью библиотеки Volley в Android studio!

    Не совсем понятно, что вы хотите сказать. Android Studio это среда разработки. Или под отправкой в AS вы подразумеваете, что они отображаются в консоли редактора?

    Я хочу что бы данные запроса то есть value в приложение поступали так же с удалённого сервера, для того что бы в любой момент можно было изменить эти значения

    Ну для начала поднять небольшой REST сервис на удаленном сервере, который и будет отправлять вам данные в json в приложение. По факту вам нужен backend
    Ответ написан
  • Как зайти во внутреннию сылку сайта и парсить от туда данные?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    public class readAllLinks {
    Названия классов должны начинаться с заглавной буквы. Прочитайте про name convention

    Что касается вашего кода, то есть много нюансов.
    мне нужно взять карточки товара сайта (цена, фотографии,описание и тд) чтобы забрать все карточки товара я должен подключиться к сайту (я сделал)

    Вы просто открыли главную страницу сайта и выбрали ВСЕ ссылки (тег а).
    Elements links = doc.select("a");

    Теперь вопрос как мне переходить по всем ссылкам сайта и забирать только информацию товара?

    Я бы сделал следующим образом. Вместо того, чтобы собирать все ссылки, я бы собрал ссылки на разделы (категории).

    5f7f96bf48139905711369.png
    Вот, селектор
    #categories .sub-menu-item .sub-menu-link
    Далее собираете их в какой-нибудь List

    Далее итерируете по этому списку и переходите по ссылке, также как и здесь
    doc = Jsoup.connect(url).userAgent("Mozilla").get();

    вместо url будет ссылка из листа спарсенная из меню (картинка выше)

    Страница каталога товаров имеет пагинацию.
    Например, https://al-style.kz/catalog/mobilnye_telefony/
    5f7f97fc965ae322761133.png

    Смотрим, как работает пагинация
    https://al-style.kz/catalog/mobilnye_telefony/
    https://al-style.kz/catalog/mobilnye_telefony/?PAGEN_1=2
    ?PAGEN_1={pageNum}

    По факту к урл добавляется query param, который инкрементируется, а значит после того, как мы перешли на страницу категории, мы для каждой категории добавляем этот параметр и инкрементируем его значение до тех пор, пока страницы не закончатся. В зависимости от сайта можно по-разному проверять есть ли страница или нет.
    Например, проверить просматривется ли или существует ли тот или иной блок.

    Далее на каждой странице находим блоки (карточки товара).
    Вот, селектор:
    .elements .element
    5f7f99505660f300295427.png

    Находим селектор ссылки и сохраняем тоже в отдельный List
    .elements .element .link
    После того, как постранично прошлись по категории и собрали список всех ссылок карточек товара итерируем по этому списку и также открываем эти ссылки.

    Т.е. страницу самого товара - например, https://al-style.kz/catalog/mobilnye_telefony/mobi...

    Ну а дальше остается собрать данные при помощи в селекторов, сохранить в pojo (например, Product ) и экспортировать куда-нибудь.

    Для экспорта в xlsx можно использовать Apache POI
    Ответ написан
    2 комментария
  • Как напимер работать с api вконтакте или другими сервисами использующими Basik Autentification?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Здравствуйте!
    Для работы с API других сайтов вы можете использовать RestTemplate.
    В статье описано, как с ним работать. Как слать POST GET и др. запросы. Как получать ответы и как этот ответ разобрать в pojo
    https://www.baeldung.com/rest-template

    Вот, например, реализованный метод для получения статуса сервиса hotelbeds
    public HttpStatus getStatus() {
            RestTemplate restTemplate = new RestTemplate();
            HttpEntity httpEntity = new HttpEntity(hotelbedsAuth.hotelsAuth());
            ResponseEntity<String> response = restTemplate.exchange(
                    hotelbedsProperties.getHotelBaseUrl()+"/status", HttpMethod.GET, httpEntity, String.class);
            return response.getStatusCode();
    }

    В общем, прочитайте про RestTemplate.

    Once the bearer token expires, you will have to use Basic Authorization again to obtain a new bearer token.

    Тут вы можете использовать CRON или аннотацию @Scheduled, чтобы по крону в заданный интервал времени запускать метод по обновлению токена

    https://www.baeldung.com/spring-scheduled-tasks
    Ответ написан
    1 комментарий
  • Как вывести продукты и количество каждого из них в заказе? Например: молоко купили 3 раза, сыр 1 раз. Как такое сделать?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Здравствуйте!
    Напишите для начала, что именно вы пробовали и что у вас не получилось.
    public class Main {
    public static void main(String[] args) {
    
    }
    }


    Ответ на этот вопрос схож с ответом на предыдущий ваш вопрос. Посмотрите на ответ предыдущего ответа. Сгенерируйте геттеры и сеттеры.
    Далее получаете массив продуктов, а далее итерируете по нему.
    Ответ написан
  • Как вывести вложенный массив по шаблону конструктора?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Здравствуйте!
    Вы забыли создать геттер для Student[] students Геттером получаете массив и циклом for итерируете по нему

    public class Group {
    
        private String name;
        private Student[] students;
    
        public Group(String name, Student[]students ) {
            this.name = name;
            this.students = students;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Student[] getStudents() {
            return students;
        }
    
        public void setStudents(Student[] students) {
            this.students = students;
        }
    
    }
    
    class Student {
    
        private String name;
        private int age;
    
        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "Student{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
        
    }
    
    class Test {
    
      public static void main(String[] args) {
    
          Group group1 = new Group("KIT-25", new Student[]{
                  new Student("Max", 20),
                  new Student("Misha", 21),
                  new Student("Vitya", 19),
                  new Student("Alyona", 20),
                  new Student("Ira", 19)
          });
    
          // Вариант №1
          for (Student student : group1.getStudents()) {
            System.out.println(student.getName());
          }
    
          // Вариант №2 (Stream API)
          Arrays.stream(group1.getStudents()).forEach(System.out::println);
    
      }
    
    }
    Ответ написан
    1 комментарий
  • Spring как передать значение между методами контроллера?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Здравствуйте!
    Используйте SessionAttribute для этого
    https://stackoverflow.com/questions/37433863/how-t...
    Ответ написан
    Комментировать
  • Как превратить код в класс с "особенностями"?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Здравствуйте!
    Рекомендую прежде всего изучить основы ООП и Java разработки.

    Данные кода должны быть с спецификатором "private"

    Это называется инкапсуляцией и является одним из основ ООП.

    Не рекомендуется использование подобного рода конструкций, так как они усложняют восприятие кода. Рекомендую дополнительно изучить рефакторинг. (refactoring.guru)
    Код
    switch (m) {
        case 1:
            if (d <= 19)
                z = "Козерог";
            else
                z = "Водолей";
            break;
        case 2:
            if (d <= 18)
                z = "Водолей";
            else
                z = "Рыбы";
            break;
        case 3:
            if (d <= 20)
                z = "Рыбы";
            else
                z = "Овен";
            break;
        case 4:
            if (d <= 19)
                z = "Овен";
            else
                z = "Телец";
            break;
        case 5:
            if (d <= 20)
                z = "Телец";
            else
                z = "Близнецы";
            break;
        case 6:
            if (d <= 21)
                z = "Близнецы";
            else
                z = "Рак";
            break;
        case 7:
            if (d <= 22)
                z = "Рак";
            else
                z = "Лев";
            break;
        case 8:
            if (d <= 22)
                z = "Лев";
            else
                z = "Дева";
            break;
        case 9:
            if (d <= 22)
                z = "Дева";
            else
                z = "Весы";
            break;
        case 10:
            if (d <= 22)
                z = "Весы";
            else
                z = "Скорпион";
            break;
        case 11:
            if (d <= 22)
                z = "Скорпион";
            else
                z = "Стрелец";
            break;
        case 12:
            if (d <= 21)
                z = "Стрелец";
            else
                z = "Козерог";
            break;
            }
            System.out.println(name+" дата рождения: "+d+"."+m+"."+y);
            System.out.println("Знак зодиака: "+z);
     }


    int m, d, y, n, f;
    Всегда используйте понятные названия. Например, day, year, month и т.д.
    Вы можете например, вместо того, чтобы отдельно принимать день, месяц и год, принять сразу дату. Например, в формате - dd/mm/yyyy, а затем уже спарсить эту строку в Date.
    А далее уже проверять входит ли дата рождения человека в соответствующий зодиаку промежуток даты
    Ответ написан
  • Как получить доступ полям класса?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Рекомендую Вам прочитать какую-нибудь книгу по Java, а также изучить принципны ООП, в частности инкапсуляцию. Вам хорошо подсказали, что лучше прочитать про геттеры и сеттеры вместо того, чтобы дать вам ответ
    Ответ написан
    Комментировать
  • Как создать apk самому?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Ответ написан
    Комментировать
  • Как исправить ошибку при формировании запроса Hibernate?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Не похоже на ошибку Hibernate.
    symbol: method getSecondName()
    Уточните пожалуйста, есть ли у вас поле secondName ?
    Есть ли у вас геттер для этого поля getSecondName() ?
    Используете ли вы библиотеку lombok ? Если да, то не забыли ли вы добавить @Data или @Getter @Setter к вашим сущностям.
    Если добавили, то включен ли annotaion processor ?
    Ответ написан
    Комментировать
  • Почему не работает цикл while в java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Такая конструкция неверна.
    else (beerNum < 1)

    Либо else { ... }
    Либо else if (условие) {...}
    Ответ написан
    8 комментариев
  • Почему не работает preparedStatement при работе с Postgres?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Лишь дополню ответ Сергея Горностаева
    Попробуйте вот в этой строке задать другой id
    preparedStatement.setInt(1, 1);
    У вас нарушение уникальности primary key и соответственно, нужно указать другой идентификатор отличный от 1
    Ответ написан
    2 комментария
  • Можете посоветовать туториал по Spring Framework/Spring MVC?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Здравствуйте!
    В первую очередь книга Spring in Action
    На youtube вроде неплохой туториал по основам Спринга - https://www.youtube.com/channel/UC2KfmYEM4KCuA1Zur...
    Я еще проходил вот, этот курс - https://www.udemy.com/course/spring-boot-intro/
    Для начала разработки этого хватит. А дальше уже развивайтесь.
    + spring.io baeldung.com
    Ответ написан
    1 комментарий
  • При запуске программы которую я создал в SceneBuilder в IntelJ выдаёт такую ошибку что делать?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Ответ написан
    Комментировать