• 0
HyperZen

Неадекватное поведение приложения под Android...

Вопросы

Добрый день!

Вот пример простенького приложения - генератор паролей с простейшим алгоритмом неповторяющихся символов.

Под Windows работает все корректно, вообще без каких-либо нареканий. Но вот под Андроид: генерируется любое количество символов (иногда и нужное количество, заданное трэкбаром), появляются артефакты, иногда выдает вообще пустое окно. Посмотрите, пожалуйста, в чем дело, ничего не пойму :)

Некорректная работа наблюдается как на реальном устройстве, так и на эмуляторе.

(Windows 10 64 bit, Berlin Update 2).

PassGen.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 ответов на этот вопрос

  • 0

думаю, вы упускаете этот момент

http://docwiki.embarcadero.com/RADStudio/Seattle/en/Zero-based_strings_(Delphi)

в андроид индексы в строках идут с 0, на десктопе - с 1

и, насколько я помню, все движется в сторону immutable strings, когда нельзя будет заменить конкретный символ в строке кроме как составлением новой строки

так что приводите свой алгоритм в соответствие с этими вводными

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

вот исправленная версия, надеюсь поймете где была ошибка

PassGen.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
  if (LengthPassword > Length(Symb)) then TempLengthPassw := Length(Symb)
    else TempLengthPassw := LengthPassword;

//  ShowMessage('LenghtPassword: ' + LenghtPassword.ToString + ', Length(Symb): ' + Length(Symb).ToString + ' ' + Symb[0]);

  SetLength(Result, TempLengthPassw); // устанавливаем длину конечной строки
  LengthSymb := Length(Symb); // Длина Таблицы для внутреннего цикла

  N := 0;

  while N < TempLengthPassw do
    begin
      TempLetter := Random(LengthSymb);
      // проверяем присутствие этого символа в конечной строке
      if (Pos(Symb[TempLetter], Result) = 0) then
        begin
          Result[N] := Symb[TempLetter]; // теперь его сохраняем
          Inc(N); // символ не найден
        end;
    end;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

ZuBy, в Вашем решении:

SetLength(Result, TempLenghtPassw + 1);

+ 1 же не нужен?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу