I'm having a bunch of problems with my App. Its purpose is to take a photo from the back camera every time a timer goes off and upload it on Google Drive
Here it is the workflow:
reads a CSV file from a Google Drive folder which has some configuration infos, like timer duration, resolution, ecc. All the configurations are applied with a procedure.
The timer starts. When it finishes, a photo is taken, and it's supposed to be uploaded in a folder on Google Drive via Google Apps Script.
Every 15 minutes, it reads the configuration file again and updates a Google Sheets file that is useful to me to check the course of the App.
The second step contains the problem: I check the connection before start uploading the photo, but if the connection drops during the upload itself, the app freezes for some seconds and then crashes. I've tried to open another app, leaving it in the background for some tests, and it crashes too.
These are my main blocks:
Camera setup and CSV reading (WEB1)
These are some logs that I extracted with ADB Logcat: logs.txt (743.3 KB)
Apparently the phone automatically decides to turn off the app after the failed call. I tried the app on another phone, and it behave in the same way. It's a problem, because it has to take photo in an enviroment with poor connection, and sometimes it goes off. This has to work fore some days.
Other informations that can be useful. I'm working on a Samsung Galaxy A50 with Android 11. The other phone is a Xiaomi Redmi Note 12C with the same OS.
If other informations are required, I'll stay online.
Thanks in advance for the help.
In the third image there is the function "setTimerTo", that sets the timer for Clock1. The value is defined in the file CSV. The setTimerTo() call is in the first image in Web1.gotText
The size of the images is around 5 MB. Reducing its size would just reduce the probability that the problem appears, since the upload would be faster. But it would not solve the problem itself
The quality should be the best, because these images are meant to be processed to extract some datas on plants
If you have an unreliable connection, then all you can do is to check the connection before sending. If the upload fails due to a connection drop out, then you should store the image on the device and try again later. If this failed upload is causing a crash, you will need to capture the point at which the connection fails.
How can I abort the POST call after the connection error has been revealed?
I'm also having trouble to figure out how can I reveal the error before the crash happens, since the check and the upload should be running in the same time
It is a problem if I ask for a block example of this solution?
Testing this here is difficult, it means a long enough upload to give time to turn off wifi and data on the device to see what happens before the upload finishes!
I tried some tests eliminating the connection check before the start of the upload, and turning off wifi after the CSV file was read, but before the photo is taken.
I mean, nothing changes in the behaviour of the app if the connection turns off before the start of the upload or during it. The system closes the app in the moment it detects the error of no connection
10-15 15:57:03.665 25747 25747 E Form : Form Screen1 ErrorOccurred, errorNumber = 1103, componentType = Web, functionName = PostText, messages = Unable to complete the given request with the text "filename=img_2023/10/15_15:57:02.jpg&mimetype=data:image/jpeg&folderid=1SdMLhHCswBDbI0g-QcK-XaJnm-Lhh16p&data=%2F9j%2F4AAQSkZJRgABAQAAAQABAAD%2F4gIoSUNDX1BST0ZJTEUAAQEAAAIYAAAAAAIQAABtbnRyUkdC%0AIFhZWiAAAAAAAAAAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAA%0AAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlk%0AZXNjAAAA8AAAAHRyWFlaAAABZAAAABRnWFlaAAABeAAAABRiWFlaAAABjAAAABRyVFJDAAABoAAA%0AAChnVFJDAAABoAAAAChiVFJDAAABoAAAACh3dHB0AAAByAAAABRjcHJ0AAAB3AAAADxtbHVjAAAA%0AAAAAAAEAAAAMZW5VUwAAAFgAAAAcAHMAUgBHAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAA%0AAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA%2BEAAC2z3Bh%0AcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABYWVogAAAAAAAA9tYAAQAAAADT%0ALW1sdWMAAAAAAAAAAQAAAAxlblVTAAAAIAAAABwARwBvAG8AZwBsAGUAIABJAG4AYwAuACAAMgAw%0AADEANv%2FbAEMAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB%0AAQEBAQEBAQEBAQEBAQEBAf%2FbAEMBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB%0AAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf%2FAABEIDKgWgAMBIgACEQEDEQH%2FxAAbAAADAQEB%0AAQEAAAAAAAAAAAAAAgMBBAUGCv%2FEAFcQAAADBQUFBwQBBAEDAgEAGwECEQADEiExEyJBUWFxgZGh%0A8CMyM7HB0eEEQkPxUxRSYmNzJHKDgpOSoqOzNLLC8gVEw9LT4uMVVGSE8yU1dJSkxNS0%2F8QAFAEB%0AAAAAAAAAAAAAAAAAAAAAAP%2FEABQRAQAAAAAAAAAAAAAAAAAAAAD%2F2gAMAwEAAhEDEQA%2FAPwDPhML%0Aw9%2BOq7Ng%2FvktrE4OIoBiXoZ4pXMQZO6U5Dkv4T9euAtR29PCEZ7hHlKTTAETJGCIRIBT3HeO%2FfXV%0AmgOYpxIfsQmAvBT31mGFZsr58LwZXC%2Fx7wpJONE3NOM8EM4dg%2FqnvWbB1PPpzunRHneXQRAJpoOj%0ARvvDkIY8ZVkOGuq%2BfFqleRGgOd4Ry7kiT38hlwxCURSvoyrY2stiqnDlsYGMUlsUhI4JAKjP1lRV%0AoDWifFj%2Bmc9y1HtAx26T8w2SuGE76OA4PZb12ctWmBjrEQ%2BOPSyw6UOwXDmGzIf%2FAKhbNFlrKaDs%0ARFxxi8Id2rkhHgLnjOfNMm5gjjud%2FT0XdzwaxfqPqSvIxETHzOC%2B1VwYFExyl%2FpzFSa6rOaU9cZi%0Ajdf1BfpSO3MFoD6y63oI824hMZ49jMa%2Bd5NcxEJy4a8Wa8Z6BCK8%2FE72UBONNWDoF5E5J9MDmF8t%0AZqMx0l0Dc0MLyE8Z9HdR62Nd59L9SU1%2F8YVWlcJYggzabsCFOQ5zriK9cduqsETJF2eWm%2FTrNuoX%0AB3Ls53pBj1HZ0oNGcZjk%2FlXmI75iI7mZ59Q%2BfH747QHrPfWlAR2WI5CHG6GWm7d56vZ%2F9QBO8QXu%0ACVXqWNKix3YyCMZ%2Bh47VSuTKQ5iviHJfPhaBtDEcg%2FbAwlOUxwIUL70XQbZCnW1kMIlLAcl%2F190y%0Axyqzv%2FqHzwwR3NOXQAEmCxSfHMJyzXPhnnjvkwQv9ydfjhzw0a5TEKEB785V%2FYVxYKU748cFMHfx%0ArsxBlg7WyUYF9FXjivswMYzmHuX%2BW8P0qNrt5CWzORU02CE2wzmEx4DkPPf1PXBWchV75LvivDz5%0AT140YImsYrlpAk1oqcdrAEtDGKQjw5xEZYouPAOgnM0Ed1YN647%2FAI1bt%2Bn%2BosXb7uEPs5AE9iaZ%0A0DnUpXgRrJXb3cKY4inLjV47%2BkIJDEO8OQaggaSEUDqTSEpktj%2Ffjv8AiTBXL0SmOFwlRFd8k6kw%0AN%2F0y3I%2F%2FACJ6Y05tK%2BAxXynzQZ6BQUzXmrP%2FAE5rO1iJDkuuSdbGBMS4QxxOQMcvUNuTBZ48IZyW%0AJf6hcqKIhsonDjAIymjIuvVMsWe5EdCXHnhS4Ls14ZIWCO%2BDw58dB8%2FQJTYCI620YR7PWnzKjK8M%0AL04nQaTprRqwuTPIO0ReC6LLhoyi7O7A9fEF1vnl1PaDB1vfp3Tv6Uj52eMREetOq4czspDTJXGM%0AfbdSU%2BEzGPDCHcAKSln1gzGIcHZXpe4ohvDBAy5blYOgn0%2FbRnJ2K%2B0sUFVpi3MaC0PAkCbv1Wkm%0A6Xb58V2%2BIcjw5HleeO6gKs25naF79NZgCp8sCGLBIe%2F5dB1lZ8BAEkBhm6C05U2qnSNa2%2BmCGB3G%0Aenae%2BA9ajxmMJjHP56oHkrA99MY03%2FtN25n8O%2BH5AGTwOt1Ws8%2BqJaEO6JAjpB219BoOLc8L14Q7%0A2CIioI67qpjyRgZTu3yEP1rrqGNG05ULeKP9Ra8cZ4T1%2BAm5Me0AQs4v9oSFfNnMZ9bRn79BHqYq%0AO1gs8dkL9KR4Q7wrzwnrsdR3KGmCtzuwIYxrU8C1w4J7DLa2PXtognRf8E5qwQwEKF2PqmPLEJsC%0AQxCeCdE2KHthLc3TaWaEJ%2FF2q6BsnUBk0YjlN%2FyZV29bZM5S2hTrcOA8dOp5CwBSkMWI54MkWSoN%0AaCsmUBPZH%2B0FwkoYh7b2EvkJHGT%2FAFyHHrZqxFCc4F7UmNaeaBwYHMHcOeAS2YIAZjolV0lwaaFM%0AphPcomO8A6VNjAX0Oc%2BzTTZgPCbDwpBHsSPIF%2FJ8CHHcosCCXAT8fkWtEe4QrwRJj1jTBkAhAELa%0A1LPEF9Okwq1jGcj9PdIh%2FwBrqm8A9Q5kQf7j5BNOFdM5I1ju5ksrSN5guG7rgyGKe6ZIa%2B0tZLtY%0AtDmMv3rXDltl5sHUBnJfozunhP8AqQeiIZ4Sl1ublF2eGMxISKOlefujdVic308finyQbYNUUR21%0AGWdYWxywkOQBT7DhhhUJZZyYEKaE0f2b9iInHOW6zx6R68JA70d4Z4bZpsGTRiiN%2FhTjkGee%2FMGs%0AWC2eCS5SytOOPvrLAJFE7l4aURyUxoNQGuIeTAvYi3ygPaKuIdUYMYimjBT%2BW%2FraFWdwT8zwFdO1%0AyVcvJgCvoDKd2i9KPVB1bIRhO%2BKWQPcd8gTrIJsjwwvDRriI5S4aZCwV4JQOSMYB0qAZfvYwAFED%0AEOctwQx0qqpnyZzASE4QD4oznJfb3yZY4iQHO8jHCob1FaeuYizvDWlkQnfouY8KcqsDPozCSM4h%0ApPqQYcsouyHM
10-15 15:57:03.682 25747 30256 I .ProvaTirocini: Background young concurrent copying GC freed 392(42KB) AllocSpace objects, 4(44MB) LOS objects, 5% free, 68MB/72MB, paused 14.675ms total 88.559ms
I'm sorry if that is not clear. Every 15 minutes the app reads a CSV file that contains the value in milliseconds of the timer for the photos.
The interval is variable: I can edit the value in the CSV file so the next reading by the app will change the timer. Commonly I use an interval of 180000 ms (3 minutes), 3600000(1 hour) or 14400000 ms(4 hours). For testing I used an interval of 60000(1 minute) to speed up the process.
How do I post a screenshoot of the event? You want a screenshoot of the text file when i saved the log or a screen of the phone when the event happens?
To read the CSV file, i perform a GET call with the component Web1.
When i read the CSV file it behave like it should. It returns an error code and simply does not do anything, and the app keeps running like it should.