Перейти к содержанию
Fire Monkey от А до Я

Dmitry Sobko

Пользователи
  • Постов

    35
  • Зарегистрирован

  • Посещение

Весь контент Dmitry Sobko

  1. Здравствуйте коллеги! Помогите пожалуйста, всю голову сломал. google не помог. Я написал приложение, которое разместил в PlayMarket'е. На моем смартфоне (Highscreen Power Rage) оно работает очень хорошо, без всяких проблем. Вопрос: Кто бы не скачал мое приложение, ссылка https://play.google.com/apps/testing/ru.portalle.ElectraDoors, приложение после заставки либо вылетает, либо просто висит черный экран. В чем может быть проблема? Дебагер не выдает никаких ошибок или предупреждений. В личном кабинете PLayMarket'а перед публикацией неизвестные мне люди тестируют это приложение и у всех одна и та же ситуация http://joxi.ru/J2be3VVcJvQMm6 Но один, видимо самый ответственный http://joxi.ru/bmoovzzhLjBXmy, пишет описание проблемы: Проблема: java.lang.NullPointerException: Attempt to invoke interface method 'com.android.volley.l com.google.android.finsky.api.b.a(com.android.volley.t, com.android.volley.s, boolean)' on a null object reference FATAL EXCEPTION: main Process: com.google.android.videos, PID: 26336 java.lang.NullPointerException: Attempt to invoke interface method 'com.android.volley.l com.google.android.finsky.api.b.a(com.android.volley.t, com.android.volley.s, boolean)' on a null object reference at android.os.Parcel.readException(Parcel.java:1552) at android.os.Parcel.readException(Parcel.java:1499) at com.android.vending.contentfilters.IContentFiltersService$Stub$Proxy.getContentFiltersAndIntent(SourceFile:139) at com.google.android.videos.contentfiltering.ContentFiltersManager.saveContentFiltersToPreference(SourceFile:438) at com.google.android.videos.contentfiltering.ContentFiltersManager.access$100(SourceFile:81) at com.google.android.videos.contentfiltering.ContentFiltersManager$1.onServiceConnected(SourceFile:423) at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1314) at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1331) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:6837) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199) Google говорит о том, что проблема с какими то фрагментами. http://ru.stackoverflow.com/questions/514856/Ошибка-attempt-to-invoke-virtual-method-on-a-null-object-reference Дословно: Метод onCreateView фрагмента предназначен для создания корневого элемента пользовательского интерфейса фрагмента. Т.е. в нем первым делом вы создаете view которая будет отображаться, а в конце вы должны вернуть эту view из этого метода. Вы же зачем то пытаетесь искать ваши view в активити вызывая getActivity().findViewById(). Очевидно что их там нету, и данный метод возвращает null, но вы пытаетесь установить в них какие-то значения после чего и вылетает NullPointerException. О чем это он? Где мне это в Delphi смотреть? Надеюсь на вашу помощь! Спасибо!
  2. Прошу прощения за беспокойство. Проблема решена. Ура! Действительно отладчик сбил с толку. voytalexey и kami спасибо Вам большое! На самом деле очень помогли! Проблема заключалась в нумерации символов в string, например While (S[1] = '0') работает под Windows так как написано, т.е. берет первый символ и проверяет его. В FMX же нужно было написать так While (S[0] = '0'), т.е. первый символ - это нулевой. И как-то странно тогда получается, нет бы для всех операций со строками сделали такое правило, что первый символ - это S[0], когда например delete(S, 1, 1) удаляет именно первый символ, ведь следуя логике должно быть так delete(S, 0, 1). Это тоже сбило с толку. Еще раз всем большое спасибо! Если кому нужна будет реализация RSA для Android с использованием FGInt - поделюсь.
  3. Вот так у меня выглядит запись TFGInt TFGInt = Record Sign : TSign; Number : Array Of LongWord; End; Вот так я пытаюсь перевести из двоичной системы в число Procedure Base2StringToFGInt(S : String; Var FGInt : TFGInt); Var i, j, size : LongWord; Begin While (S[1] = '0') And (length(S) > 1) Do delete(S, 1, 1); size := length(S) Div 31; If (length(S) Mod 31) <> 0 Then size := size + 1; SetLength(FGInt.Number, (size + 1)); FGInt.Number[0] := size; j := 1; FGInt.Number[j] := 0; i := 0; While length(S) > 0 Do Begin If S[length(S)] = '1' Then FGInt.Number[j] := FGInt.Number[j] Or (1 Shl i); i := i + 1; If i = 31 Then Begin i := 0; j := j + 1; If j <= size Then FGInt.Number[j] := 0; End; delete(S, length(S), 1); End; FGInt.Sign := positive; End; Казалось бы ничего военного, обычная работа с массивами, строками, но в итоге этот код записывает в FGInt.Number значение равное "01"
  4. Вы полностью правы! Действительно, раньше подобной ситуации я не замечал, пока не столкнулся с FGInt. У меня стоит задача кодировать и декодировать сообщения шифрованием RSA. Для работы с большими числами я использую сторонний модуль FGInt http://www.submanifold.be/triade/GInt/gint.html Этот модуль очень правильно, без погрешностей, производит любые операции с большими числами и в том числе у него есть функционал создания цифровых подписей, кодирования и декодирования информации. Перед тем как выбрать решение для шифрования RSA под Android я много гуглил и много кто ссылался именно на этот модуль. Скачав и изучив его я не нашел ничего такого, что могло бы не работать под Android. Но к сожалению столкнулся с ситуацией, когда я перевожу строку в число типа FGInt и обратно, то мне возвращается постоянно число 01 вместо 1440294937918237327. По всем ощущениям баг возникает после использования SetLength. Но я конечно могу ошибаться. Может если приложу проект сюда, поможете разобраться?
  5. Добрый день! Обращаюсь к Вам с проблемой работы в FireMonkey с динамическими массивами. Ситуация такая, в ходе работы приложения под Android мне необходимо задавать в определенный момент времени размер массива. Функция SetLength почему-то не работает. Например, если делать так: procedure TForm1.Button1Click(Sender: TObject); var Number123 : Array Of Integer; i : integer; begin SetLength(Number123, 5); for I := 0 to 4 do begin Number123[i] := i; end; end; то можно наблюдать следующую ситуацию, что до работы SetLength массив пустой http://joxi.ru/DmBXxLLclDM6AP и это нормально, а после задания длины с массивом происходят странные вещи - вместо ячеек массива какое-то шестнадцатиричное значение http://joxi.ru/823O5xxSYdxl2O, элементы массива по циклу не заполняются. Если то же самое делать под Windows, то все красиво - http://joxi.ru/gmvR7vvHD3lyma и http://joxi.ru/Vm6ydxxhYPLXrZ Если под Android сделать так: procedure TForm1.Button1Click(Sender: TObject); var Number123 : Array [0..4] Of Integer; i : integer; begin for I := 0 to 4 do begin Number123[i] := i; end; end; То все работает как надо: http://joxi.ru/KAgKWooTDB84Al Помогите пожалуйста разобраться. Гугл не помогает совсем. Я думаю, что тут должно быть все просто, просто не хватает мне немного знаний и понимания что не так. Надеюсь на помощь. Спасибо!.
  6. А где можно эти примеры посмотреть?
  7. Добрый день! У меня тоже такой вопрос. Я использую XE10 В примерах есть получение списка устройств, подключение к ним, и даже как отправить текст на устройство, но к сожалению этот пример не рабочий (про отправку текста). Т.е. я подключаюсь к устройству, пытаюсь отправить на него текст и после ожидания появляется ошибка в логе. Помогите пожалуйста разобраться с приемом/передачей текстовой информации с/на устройство. Спасибо!
  8. Подскажите, могу ли я как-то передать поток видео с приложения для windows в TCaptureDeviceManager? Другими словами я пытаюсь подключиться к веб камере компьютера с мобильного устройства. Спасибо!
  9. Друзья, подскажите пожалуйста, каким образом можно реализовать меню в стиле аккордеон как тут https://jqueryui.com/accordion/. Требования к компоненту: 1) На форму бросается этот компонент, у него есть ширина и высота. 2) В этом компоненте должны добавляться итемы, хоть в дизайнтайме, хоть в рантайме, высота которых так же задается в свойствах компонента, которая будет для всех одна 3) Должна быть свойство у компонента, которое имеет значение истина или ложь, которое означает развернуть первый элемент при запуске, или все элементы свернуты 4) Развернутым должен быть только один элемент, если кликаем (тапаем) на свернутый и при этом есть развернутый элемент, то развернутый должен свернуться, а выбранный - развернуться 5) У каждого элемента есть заголовок и изображение в виде треугольника, означающее развернут элемент или нет.\ 6) Элементы разворачиваются на всю свободную область сдвигая свернутые ниже вниз, за пределы видимой области. 7) Если элементы находятся за пределами видимой области - появляется скролл. У меня есть уже наброски, но я уверен, что я все делаю не так. Может уже кто-то задавался этим вопросом и есть уже готовое решение, хотя бы частично? При необходимости предоставлю свой г...код, но лучше не стоит)) За основу я взял TVertScrollBox, в рамках которого все и происходит. В него я пока программно создаю столько TExpander'ов, сколько мне нужно - это итемы. Вот г...код: procedure TMainForm.AccordionAddItem(IdItem, CountItems: integer; IdRubricGood, CaptionText: string); var AccordionNewItem : TExpander; begin if AccordionItems[IdItem] <> nil then AccordionItems[IdItem].Destroy; AccordionNewItem := TExpander.Create(VertScrollBox_RubricsGood); With AccordionNewItem do begin Parent := VertScrollBox_RubricsGood; Align := TAlignLayout.Top; Text := CaptionText; StyleLookup := 'Expanderstyle'; Name := 'AccordionItem'+IntToStr(IdItem); Height := MainForm.Height-170; //(CountItems * 150)+29; IsExpanded := False; TagString := IdRubricGood; StylesData['text.OnClick'] := TValue.From<TNotifyEvent>(OnMaxMinPanelItems); end; AccordionItems[IdItem] := AccordionNewItem;end; Потом еще куча кода на отловить развернутые и свернутые итемы и вставку ListBox'внутрь открытого с нужным мне контеном: procedure TMainForm.OnMaxMinPanelItems(Sender: TObject); var AccordeonSelectedItem: TExpander; I:integer; begin AccordeonSelectedItem := TExpander(FindItemParent(Sender as TFmxObject,TExpander)); ListBoxGoods.Items.Clear; for I := 1 to RubricGoodsSize do begin if (AccordionItems[I].TagString = AccordeonSelectedItem.TagString) AND (AccordionItems[I].IsExpanded = False) then begin AccordionItems[I].BeginUpdate; RectangleRestourantHeader.Visible := False; AnimationAniIndicator(True); AccordionItems[I].IsExpanded := True; GoodList(AccordeonSelectedItem.TagString, Sender); AccordionItems[I].EndUpdate; AnimationAniIndicator(False); end else if (AccordionItems[I].TagString = AccordeonSelectedItem.TagString) AND (AccordionItems[I].IsExpanded = True) then begin AccordionItems[I].IsExpanded := False; RectangleRestourantHeader.Visible := True; end else begin AccordionItems[I].IsExpanded := False; end; end; end; Я в отчаянии, помогите чем можете, очень нужно. Спасибо!
×
×
  • Создать...