Android! Разработка мобильных


Sudokuv4/src/org/example/sudoku/Game.java)



Pdf көрінісі
бет76/87
Дата26.01.2023
өлшемі3,48 Mb.
#63133
1   ...   72   73   74   75   76   77   78   79   ...   87
Байланысты:
Привет, Андроид Разработка мобильных приложений

 Sudokuv4/src/org/example/sudoku/Game.java)
@Override
protected void onCreate(Bundle savedInstanceState) {
// ...


112 Глава 6 • Хранение локальных данных 
// Если деятельность перезапущена, продолжить игру в следующий раз
getIntent().putExtra(KEY_DIFFICULTY, DIFFICULTY_CONTINUE);
}
На �то закончи� наш раз�овор о преду�тановках� Тепер� давайте по��отри� на 
�охранение �о�тояния запу�енно�о �кзе�пляра и�ры�
6 .3 . Запоминание текущей позиции курсора
Е�ли вы из�ените ориента�и� �крана в про�е��е выполнения Su��ku� то за�етите� 
что она «забывает» пози�и� кур�ора� Это прои�ходит пото�у� что �ы и�пол�зу�
е� �об�твенное окно про��отра 
PuzzleView
� Обычно окна в ������� запо�ина�т 
�об�твенное �о�тояние авто�атиче�ки� но как тол�ко �ы �а�о�тоятел�но �оздае� 
про�ра��ное окно� на� приходит�я позаботит��я об �то� �а�и��
В отличие от преду�тановленно�о �о�тояния �о�тояние запу�енной про�ра��ы 
по�тоянно из�еняет�я� Оно находит�я в кла��е 
Bundle
�тека приложений �������� 
Со�тояние запу�енной про�ра��ы предназначено для �охранения небол�ших 
пор�ий инфор�а�ии� таких как положение кур�ора�
Вот что �ы должны �делат�� чтобы вкл�чит� данну� функ�и� в нашу про�
�ра��у:
 Sudokuv4/src/org/example/sudoku/PuzzleView.java
1 import android.os.Bundle;
- import android.os.Parcelable;
-
- public class PuzzleView extends View {
5 private static final String SELX = "selX" ;
- private static final String SELY = "selY" ;
- private static final String VIEW_STATE = "viewState" ;
- private static final int ID = 42;
-
10 public PuzzleView(Context context) {
- // ...
- setId(ID);
- }
-
15 @Override
- protected Parcelable onSaveInstanceState() {
- Parcelable p = super.onSaveInstanceState();
- Log.d(TAG, „onSaveInstanceState" );
- Bundle bundle = new Bundle();
20 bundle.putInt(SELX, selX);
- bundle.putInt(SELY, selY);
- bundle.putParcelable(VIEW_STATE, p);
- return bundle;
- }


6 .4 . Доступ к внешней файловой системе 113
25 @Override
- protected void onRestoreInstanceState(Parcelable state) {
- Log.d(TAG, „onRestoreInstanceState" );
- Bundle bundle = (Bundle) state;
- select(bundle.getInt(SELX), bundle.getInt(SELY));
30 super.onRestoreInstanceState(bundle.getParcelable(VIEW_STATE));
- }
- // ...
- }
В �троке 5 �ы определяе� кон�танты для кл�чей �охранения и во��тановления 
пози�ии кур�ора� На� нужно �охранят� и координату X� и координату Y и вдобавок 
л�бое �о�тояние� необходи�ое для базово�о кла��а 
View

�ак ча�т� обработки 
Activity .onSaveInstanceState()
������� �пу�кает�я по иерархии 
окон про��отра и вызывает 
View .onSaveInstanceState()
в каждо� из окон� �D которо�
�D которо�
которо�
�о он найдет� То же �а�ое прои�ходит для �етода 
onRestoreInstanceState() .
Обычно 
�тот идентификатор (�D) берет�я из XML� но по�ле то�о� как 
PuzzleView
был �оздан 
по�ред�тво� про�ра��но�о кода� �ы должны у�тановит� �D �а�о�тоятел�но� Мы 
задае� произвол�ный но�ер в �троке 8 (подойдет л�бое положител�ное значение) 
и зате� и�пол�зуе� �етод 
setid()
в �троке 12� чтобы при�воит� е�о�
Метод 
onSaveInstanceState()
определен в �троке 16� Мы вызывае� �уперкла��� 
чтобы получит� е�о �о�тояние� и зате� �охраняе� е�о и наше �о�тояния в 
Bundle
� 
Невоз�ожно�т� вызыват� �уперкла�� приводит к ошибке вре�ени выполнения�
Позже вызывает�я 
onRestoreInstanceState()
(�трока 26) для извлечения �охра�
ненной на�и инфор�а�ии� Мы получае� �об�твенные координаты X и Y из 
Bundle
и зате� вызывае� �уперкла��� чтобы позволит� получит� е�у в�е� что необходи�
�о� По�ле то�о как произведены �ти из�енения� пози�ия кур�ора запо�инает�я 
PuzzleView
так же� как и для л�бо�о дру�о�о окна про��отра ��������
Тепер� давайте по��отри�� как хранит� данные в �тарых добрых файлах�
6 .4 . Доступ к внешней файловой системе
В недрах ������� работает L��ux� по�то�у зде�� и�еет�я и реал�ная ��онтирован�
������� работает L��ux� по�то�у зде�� и�еет�я и реал�ная ��онтирован�
работает L��ux� по�то�у зде�� и�еет�я и реал�ная ��онтирован�
L��ux� по�то�у зде�� и�еет�я и реал�ная ��онтирован�
� по�то�у зде�� и�еет�я и реал�ная ��онтирован�
ная файловая �и�те�а � корневы� катало�о� и в�е� о�тал�ны�� Файлы хранят�я 
в �нер�онезави�и�ой фл�ш�па�яти� в�троенной в у�трой�тво� по�то�у они не 
теря�т�я� ко�да телефон выкл�ча�т�
Вы �ожете пол�зоват��я в про�ра��е в�е�и обычны�и подпро�ра��а�и 
ввода�вывода Java из пакета 
java .io
� � учето� то�о� что ваши про�е��ы и�е�т 
о�рани ченные разрешения� которые не позволя�т и� вне�ти бе�порядок в данные 
дру�их приложений� На �а�о� деле о�новное �е�то� куда они �о�ут получит� 
до�туп� — �то приватная папка пакета� �озданная во вре�я у�тановки (
/data/data/
packagename
)�
В кла��е 
Context
е�т� не�кол�ко в�по�о�ател�ных �етодов (и и�и же кла�� 
Activity
ра�ширяет кажду� из деятел�но�тей)� которые позволя�т читат� и запи�


114 Глава 6 • Хранение локальных данных 
�ыват� данные в �ту папку� Вот некоторые из них� которые наверняка ва� понадо�
бят�я:
deleteFile()
Удаляет приватный файл� Возвра�ает t�ue при у�пешно� завершении 
дей�твия� в противно� �лучае — false
fileList()
Возвра�ает �пи�ок файлов в приватной зоне приложения в �а��иве 
St���g()
openFileInput()
Открывает приватный файл для чтения� возвра�ает java������le��put�
St�eam
openFileOutput()
Открывает приватный файл для запи�и� Возвра�ает java������leOut�
put St�eam
Однако так как �та внешняя па�ят� о�раниченна� я реко�енду� хранит� зде�� 
лиш� небол�шие объе�ы данных� напри�ер �е�абайт или� в крайне� �лучае� два� 
и т�ател�но обрабатыват� ошибки ввода�вывода на тот �лучай� е�ли �вободное 
про�тран�тво будет и�черпано�
� �ча�т��� внешняя па�ят� — �то не един�твенное хранили�е данных� � кото�
ры� вы �ожете работат��


Достарыңызбен бөлісу:
1   ...   72   73   74   75   76   77   78   79   ...   87




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет