1 Востаннє редагувалося taburyak (08.12.2017 10:54:38)

Тема: програма android - відображення поточного числа на екрані

Засіб розробки: Visual Studio 2017
Мова: C#
Платформа: Android
Відладка на емуляторі: AVD

Що вже працює:
- На екрані дисплею показана поточна дата чорним кольором на білому фоні, екран не вимикається.

Що ще треба:
- По святковим дням дату показувати червоним кольором.
- По дням народженням, певних товарищей і товарок, дату фарбувати, наприклад, в рожевий, фон з квітами.

Як це я планую реалізувати:
- на святкові та днюхові дні мати два текстові файли з відповідними датами birthday.txt та holidays.txt
- при завантаженні та зміні дня, читати ці файли і всі дні заносити до списку:

List<DateTime> listDatesBirthday = new List<DateTime>();
List<DateTime> listDatesHolydays = new List<DateTime>();

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

Це моя перша розробка під Android і я ще багато не розумію що до чого.

В чому затик:

  • щоб прочитати файли треба ті файли мати на тому ж емуляторі десь. Я не знаю як то зробити. Як їх туди впіхнути. Допоможіть. Вже як їх прочитати то вже справа друга.

  • як варіант, файли тримати десь в хмаринці (google drive, drop box). Як в такому випадку їх читати?

Поки тут затик, потім, звісно ще буде, але допоможіть хоч поки з цим. Може якісь ще варіанти можливі? Давайте пропозиції.

2

Re: програма android - відображення поточного числа на екрані

Йо-хо-хо!!! Знайшов!

Файли до каталогу програм на емуляторі закинув (Open Perspective -> DDMS -> File Explorer -> Push a file onto the device)

Рядки читаються:

void ReadFile()
        {
            try
            {                                
                BufferedReader bufferHolyday = new BufferedReader(new InputStreamReader(OpenFileInput(FILE_HOLYDAY)));
                String str = "";
                int i = 0;
                
                while ((str = bufferHolyday.ReadLine()) != null)
                {
                    listDatesHolydays.Add(DateTime.Parse(str));
                    // це для відладки
                    Toast.MakeText(this, "Read Line" + i + " " + str, ToastLength.Short).Show();
                    i++;
                }
            }
            catch (Java.IO.FileNotFoundException e)
            {
                e.PrintStackTrace();
                Toast.MakeText(this, "File Not Found", ToastLength.Short).Show();
            }
            catch (Java.IO.IOException e)
            {
                e.PrintStackTrace();
                Toast.MakeText(this, "Unknow Error", ToastLength.Short).Show();
            }
        }

Ну тепер треба якось порівняти то все з поточною датою, але то вже мабуть гуглиться на раз-два.

Подякували: 0xDADA11C7, PRY, koala, leofun014

3 Востаннє редагувалося taburyak (12.12.2017 14:29:46)

Re: програма android - відображення поточного числа на екрані

Ага, ага. Швидкий як хвейверк! (це я про себе).
Заглючив VS2017 робив йому repair + update. Цілий день котові під хвіст. Прийшлось ютюбє дивитись.
Потім заморочився, щоб файли були на зовнішній карті в своєму каталозі.
І тут почалось...
Мати моя - жінка...
Та щоб ти закис, андроїд, зі своїми файловими системами.
На загал, то я переміг, але ж біойогомать  *FACEPALM*

Залишу тут, може ще колись згодиться, а вже ж забуду полюбє:

private bool ReadFileSD()
        {
            if (!Android.OS.Environment.GetExternalStorageState(Android.OS.Environment.ExternalStorageDirectory).Equals(Android.OS.Environment.MediaMounted))
            {
                Toast.MakeText(this, "SD-карта відсутня: " + Android.OS.Environment.GetExternalStorageState(Android.OS.Environment.ExternalStorageDirectory), ToastLength.Short).Show();
                return false;
            }

            Java.IO.File sdPath = Android.OS.Environment.ExternalStorageDirectory;

            sdPath = new Java.IO.File(sdPath.AbsolutePath + "/" + "celebrations");

            Java.IO.File fileHolyday = new Java.IO.File(sdPath, FILE_HOLYDAY);
            Java.IO.File fileBirthday = new Java.IO.File(sdPath, FILE_BIRTHDAY);

            try
            {                
                using (BufferedReader bufferHolyday = new BufferedReader(new FileReader(fileHolyday)))
                {                
                    while ((str = bufferHolyday.ReadLine()) != null)
                    {
                        listDatesHolydays.Add(DateTime.ParseExact(str, "d.M.yyyy", null));              
                    }
                }
                
                using (BufferedReader bufferBirthday = new BufferedReader(new FileReader(fileBirthday)))
                {
                    while ((str = bufferBirthday.ReadLine()) != null)
                    {
                        listDatesBirthday.Add(DateTime.ParseExact(str, "d.M.yyyy", null));
                    }
                }
                return true;
            }
            catch (Java.IO.FileNotFoundException e)
            {
                e.PrintStackTrace();
                Toast.MakeText(this, "File Not Found", ToastLength.Short).Show();

                return false;
            }
            catch (Java.IO.IOException e)
            {
                e.PrintStackTrace();
                Toast.MakeText(this, "Other Error", ToastLength.Short).Show();

                return false;
            }
        }
Подякували: 0xDADA11C7, leofun012