I have an app on Android with a DataBase. This database has tables with ChangeDate columns, where I keep dates when some actions need to happen. For example, 2014-03-17..2014-05-18 and etc. The problem for me is that if I'm comparing for about 200 db records with today date on the app start , it will make my app heavier.
Is there another way or maybe a type of trigger for such things? Maybe you can advise something. Thanks in advance
Checking against 200 dates will take an instant so do not worry about the load for such a small number.
For other solutions, it depends on what those actions are. If this is just some actions to take when the app start, then the solution you suggest seems perfectly fine.
An other option may be to load your actions when loading and submit them to a ScheduledExecutorService.
Related
I have an app which is used for collection all day users collecting amount normally offline and then in the evening they uploaded amount online. Sometimes there device date and time is inaccurate so they uploaded wrong data.
At the time of collection my app is getting date and time from the device. Is there any way that app always store accurate date and time without Sim and without the Internet.
You can create a Sqlite Table in application cache when user switch on data,you
can save current server time in that Table and in offline mode you can compare server time with current time. this is the nearest approach to get accurate time
Well, before searching for an app to do this. As a human how can you tell if the date/time is correct without internet?
A possible solution would be a service which counts seconds from the last time the device was connected to the internet (which means it had a correct date/time at that moment) then when you want to add the new amount you can add the seconds to the last time and store this value.
Edit
You will 2 things to achieve this:
BackgroundService
Counter which you can achieve in many ways, I would go the easy way. check this: how-to-measure-elapsed-time
Or you can have an AlarmManager to do this.
One more thing You need to be careful if the device goes off or for some reason, something stopped the service. All of these are user issues and you need to decide how much you want to handle stuff for the user.
You can fix user mistakes by pushing to a SqlLite database every 10~15, but this won't fix if the device went off for hours and then started again at a wrong time - I don't think there is a possible solution for this-.
here is what i'am trying to achieve, either one of the two would be ok
Get the date and time from a specific url/website like "www.mywebsite.com"
Get the date and time from my MSSQL Server
either one of the two would be ok, because all i need is to get the same time from the website/server's end, because i'am making an APP Version for the Mobile Website i'am making and i want to show a Clock or Date&Time Reminder in the App
i have no codes working as of now, i tried searching online in search engines and also in stackoverflow but i can't seem to find what i'am looking for, either i'am using the wrong words to search for it or there really isn't any way
the reason why i need the date is because i'am checking when the records inside the database was created and verifying how much time has passed since it was created, it like comparing (CreationDateTime & CurrentDateTime)
i can successfully Display how many hours have passed, i just need the CURRENT PROPER & ACCURATE DATE & TIME of the server :)
I can't help but think this is an XY problem, or at least close to it.
Your client device knows what time it is, because it stays in sync via NTP and whatever network it's attached to (and we already know you're attached to a network because otherwise, this whole thing falls apart). And it knows (or should know) what timezone it's in, so you can translate that to UTC or whatever alternative timezone you might need.
Your server(s) should also be keeping time synced via NTP, so drift between the client and server should be sub-second at worst.
IOW, the time (when corrected to UTC, which all date/time libraries I've used have a method built in to do) will almost always match between your client and server, so why bother with the complexity of "pushing" the current time from server to client?
I'm not seeing why you'd need to do this at all. Have the server tell the client when the reminder is set for, then let the client work out the rest. Anything else would be excessively chatty over the network.
To get the date in the format below, just convert todays date to a string
--07/06/2017
SELECT convert(varchar(10), getdate(), 103)
i have found an alternative answer that works 100% in getting date and time from SERVER instead of URL
SELECT GETDATE() AS CurrentDateAndTime
GETDATE()
In my app, I'd like to keep track of time away from the app, so that if the user is away for say, 2 hours, and come back, they receive 1 in game currency.
In practice I could easily do this by using a date object to get the current time in onStop, saving that date object, and comparing it to a new date object when they return.
However, I have a feeling this can easily be spoofed by change the internal date settings.
Is there a more secure way? Should I just put a cap on how many hours away you can bank up? I'd love some insight. Thanks as always.
you can try to make more secure code in the app, but the safest way is to request something from a server
if you are app is already using internet permissions consider making an HTTP request to get time.
look at this site for example
http://www.timeapi.org/
if you have backend to support your app that would be extra better
if you are not using internet permissions it might not be worth it to add it just for this, you might consider a different "offline" solution
I'm wondering which is the best way to store a time into a database.
Is it better to store the time in millis as a LONG value or use the sql DATE type.
I want to store a time into the SQLite database of the android device and send it later to a server. Which is the best way in consideration of performance.
I've encountered both methods and both are valid options. Personally I would go with the sql DATE method since you have many predefined methods with reading/manipulating/writing dates in SQLite, as explained here. Storing time in millis is fine if you're willing to run extra calculations to verify the accuracy of the data later on, coming from a QA perspective.
Depends entirely what you are going to do with the time. If you are just going to display it, a text field is perfectly fine. If you are going to convert it do different formats, a long is probably the way to go.
As everyone else is saying, it all depends on what you want to do with it.
Considering your situation, I would store it in whatever format the server you are going to send it to needs.
As the saying goes, there are many ways to skin this particular cat. For example: in some instances I've taken the date and converted it to an int in the format of yyyymmdd, that way I can do simple less than/greater than/equal to comparisons without having to resort to the different time functions in SQL.
I'm developing an application that syncs a remote calendar with an Android device.
Everything works fine, but now I want to make it a bit faster by letting the Android device only sync events that got edited by the user (with Android Calendar). So I need to know which events got edited.
I've been looking into ContentObserver but that doesn't seem like a good solution since I would have to register an observer for each event in the calendar. And I don't even know if the observer would still be there if I restarted the device.
Another solution I came up with is to store a copy of all events in a local database. That database would get updated on each sync. And before each sync we could compare that database with the Android Calendar provider...
Is there an easier way to do this?
Thanks,
Gillis
I'm pretty sure you could query the calendar database for events modified after a certain date (which would be the date after the most recently modified event was modified).
The query would be so cheap you could repeat it every second or so.
Edit: I've been looking through the schema for a column to represent the event last modified date and I don't see one. So maybe that's not a viable route.