Урок 33. Хранение данных. Preferences.

Обсуждение уроков
ThousandDevils
Сообщения: 14
Зарегистрирован: 19 ноя 2013, 03:48

Re: Урок 33. Хранение данных. Preferences.

Сообщение ThousandDevils » 01 дек 2013, 14:50

За формат сори, впредь буду аккуратнее. А проблема решилась сама собой, как всегда =)

Bestlis
Сообщения: 2
Зарегистрирован: 28 ноя 2013, 15:28

Re: Урок 33. Хранение данных. Preferences.

Сообщение Bestlis » 02 дек 2013, 10:59

Здравствуйте!
Подскажите, пожалуйста, как создать иконку для запуска приложения, если при создании проекта она не была создана?

cbone
Сообщения: 4
Зарегистрирован: 24 дек 2013, 21:17

Re: Урок 33. Хранение данных. Preferences.

Сообщение cbone » 03 янв 2014, 22:50

Попробовал запустить приложение на Nexus 4 (отлаживаю сразу на устройстве без эмуляторов), но не смог найти места, куда сохранился MainActivity.xml. Где они могут лежать? Может не видно нужных папок потому что телефон не рутнутый?

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 33. Хранение данных. Preferences.

Сообщение altwin » 03 янв 2014, 23:04

cbone писал(а):Попробовал запустить приложение на Nexus 4 (отлаживаю сразу на устройстве без эмуляторов), но не смог найти места, куда сохранился MainActivity.xml. Где они могут лежать? Может не видно нужных папок потому что телефон не рутнутый?
вы задавали себе вопрос - зачем вы ищите MainActivity.xml в устройстве?
Изображение

cbone
Сообщения: 4
Зарегистрирован: 24 дек 2013, 21:17

Re: Урок 33. Хранение данных. Preferences.

Сообщение cbone » 03 янв 2014, 23:16

altwin писал(а):вы задавали себе вопрос - зачем вы ищите MainActivity.xml в устройстве?
А где ещё искать то?
Я попытался найти не именно MainActivity.xml а папку пакета (в моём случае ru.innovatis.myapp) и тоже не нашёл.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 33. Хранение данных. Preferences.

Сообщение altwin » 03 янв 2014, 23:25

cbone писал(а):
altwin писал(а):вы задавали себе вопрос - зачем вы ищите MainActivity.xml в устройстве?
А где ещё искать то?
Я попытался найти не именно MainActivity.xml а папку пакета (в моём случае ru.innovatis.myapp) и тоже не нашёл.
да уж.. совсем одно и то же. Данные вашего приложения сохраняются по умолчанию - /data/data/ru.innovatis.myapp
На не "рутованом" устройстве вы и не увидите их. Единственный известный мне способ: adb shell

т.е. в терминале(или консоле если мастдаем пользуетесь) вводится: adb devices
-вывод - список устройств (пример: emulator-5554 attached)
далее: adb -s emulator-5554 shell

P.S. про особенности windows я не в курсе, но есть куча туториалов в google. Иногда проще не парить себе мозг и сохранить файл туда, куда есть доступ(если вас напрягает терминал,хотя зря - он хороший.), к примеру на SD карту.
Изображение

TittTitov
Сообщения: 27
Зарегистрирован: 20 ноя 2013, 22:46

Re: Урок 33. Хранение данных. Preferences.

Сообщение TittTitov » 26 янв 2014, 21:48

Здравствуйте!

Как я понимаю, с помощью Preferences можно создать простейшую записную книжку?
Получается, в хмл-файл с Preferences-данными можно записать неограниченное количество строк с уникальными именами? Только, в уроке не упоминается о том, есть ли методы, позволяющие редатировать и удалять нужные строки. Есть ли такие методы, как ими пользоваться? Спасибо!

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 33. Хранение данных. Preferences.

Сообщение altwin » 26 янв 2014, 22:06

TittTitov писал(а):Здравствуйте!

Как я понимаю, с помощью Preferences можно создать простейшую записную книжку?
Получается, в хмл-файл с Preferences-данными можно записать неограниченное количество строк с уникальными именами? Только, в уроке не упоминается о том, есть ли методы, позволяющие редатировать и удалять нужные строки. Есть ли такие методы, как ими пользоваться? Спасибо!
Зачем вам эти методы, если можно получить - get и установить - set. По сути update - это просто запись нового значения в существующее, для delete есть remove: http://developer.android.com/reference/ ... ng.String), все описанно тут: http://developer.android.com/guide/topi ... .html#pref
Изображение

apollox
Сообщения: 23
Зарегистрирован: 07 янв 2014, 13:51

Re: Урок 33. Хранение данных. Preferences.

Сообщение apollox » 18 фев 2014, 17:05

А как с Preferences лучше создавать группы настроек?

Например:
1 группа:
книга_1_название,
книга_1_автор

2 группа:
книга_2_название,
книга_2_автор

Или Preferences лучше использовать только для одноуровненвых настроек?

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 33. Хранение данных. Preferences.

Сообщение altwin » 18 фев 2014, 17:16

apollox писал(а):А как с Preferences лучше создавать группы настроек?

Например:
1 группа:
книга_1_название,
книга_1_автор

2 группа:
книга_2_название,
книга_2_автор

Или Preferences лучше использовать только для одноуровненвых настроек?
http://startandroid.ru/ru/uroki/vse-uro ... ivity.html
Изображение

apollox
Сообщения: 23
Зарегистрирован: 07 янв 2014, 13:51

Re: Урок 33. Хранение данных. Preferences.

Сообщение apollox » 18 фев 2014, 17:54

Спасибо, это было бы то что надо, но...
На планшете тупо нет кнопки вызова меню.
То есть нет стандратной кнопки андроида, по нажатию на которое оно вызывается...

То есть я пишу

Код: Выделить всё

  public boolean onCreateOptionsMenu(Menu menu) {
  }
Но ничего нет...

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 33. Хранение данных. Preferences.

Сообщение altwin » 18 фев 2014, 18:10

apollox писал(а): Но ничего нет...
[syntax=java5] public boolean onCreateOptionsMenu(Menu menu) {
return super.onCreateOptionsMenu(menu);
}
[/syntax]
http://startandroid.ru/ru/uroki/vse-uro ... togo-menju
Изображение

apollox
Сообщения: 23
Зарегистрирован: 07 янв 2014, 13:51

Re: Урок 33. Хранение данных. Preferences.

Сообщение apollox » 18 фев 2014, 18:33

   return super.onCreateOptionsMenu(menu) внутри метода я естественно написал, тут просто код сохратил до упоминания что метод вызываю. Но увы...

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 33. Хранение данных. Preferences.

Сообщение altwin » 18 фев 2014, 18:49

apollox писал(а):   return super.onCreateOptionsMenu(menu) внутри метода я естественно написал, тут просто код сохратил до упоминания что метод вызываю. Но увы...
Вы урок по ссылке читали? перед тем как возвращать, что -то нужно добавить элемент меню:
[syntax=java5]
public boolean onCreateOptionsMenu(Menu menu) {
menu.add("Спам");
return super.onCreateOptionsMenu(menu);
}
[/syntax]
Или:
добавьте в папку res/menu файл start.xml внутри которого:
[syntax=xml]
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="тутИмяПакета.ИмяАктивити" >

<item android:id="@+id/action_settings"
android:title="@string/action_settings"
android:orderInCategory="100"
app:showAsAction="never" />
</menu>
[/syntax]
заменив содержимое tools:context и @string/action_settings
Далее:
[syntax=java5]
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.start, menu);
return true;
}
[/syntax]
Оно не может не работать.
Изображение

apollox
Сообщения: 23
Зарегистрирован: 07 янв 2014, 13:51

Re: Урок 33. Хранение данных. Preferences.

Сообщение apollox » 18 фев 2014, 21:05

Все это я естественно делал.

Я нашел, где проблема.

У меня в манифесте:

Код: Выделить всё

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />
И при таких настройках меню не появляется.

Но если поставить

Код: Выделить всё

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="13" />
то появляется.

Почему так получается?

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 33. Хранение данных. Preferences.

Сообщение altwin » 18 фев 2014, 22:12

apollox писал(а):Все это я естественно делал.

Я нашел, где проблема.

У меня в манифесте:

Код: Выделить всё

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />
И при таких настройках меню не появляется.

Но если поставить

Код: Выделить всё

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="13" />
то появляется.

Почему так получается?
я повторю -так не бывает.
Изображение

apollox
Сообщения: 23
Зарегистрирован: 07 янв 2014, 13:51

Re: Урок 33. Хранение данных. Preferences.

Сообщение apollox » 18 фев 2014, 22:25

Тогда я ничего не понимаю.
Update
Я написал код как в вашем примере. Сделал новый проект и запустил. Работает!
Меню появилось.

А в моем приложении тот же самый код - и ничего...

В своем приложении выкинул все, кроме того что сделал в новом, где меню появляется.
Написал точно такой же код, манифест, менюшки.
Все равно меню не появляется.
То ли глюк, то ли где то еще глубоко сидит настройка, которая все портит.

Вот новое приложение. Меню есть справа вверху.
Screenshot_2014-02-19-00-25-37.png
Screenshot_2014-02-19-00-25-37.png (30.11 КБ) 12634 просмотра
Вот мое, код и настройки как в новом, меню нет (
Screenshot_2014-02-19-00-28-21.png
Screenshot_2014-02-19-00-28-21.png (28.25 КБ) 12634 просмотра

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 33. Хранение данных. Preferences.

Сообщение altwin » 19 фев 2014, 00:15

значит баг, какая разница, если в другом приложении работает - перенесите код и все, это не должно занять много времени. Но вообще у вас явно выбранна другая тема на втором скриншоте.
Ну и да старые устройства не имеют action bar overflow в принципе.
Изображение

apollox
Сообщения: 23
Зарегистрирован: 07 янв 2014, 13:51

Re: Урок 33. Хранение данных. Preferences.

Сообщение apollox » 19 фев 2014, 11:09

Так и сделал, перетащил код, теперь все ок.

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

Re: Урок 33. Хранение данных. Preferences.

Сообщение n0tb0dy » 01 июн 2014, 19:06

Добрый день!

Я решил вынести сохранение данных в отдельный класс, куда эти данные и передаю

[syntax=java]
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.util.Log;

public class MySaveData {

final String LATITUDE = "latitude";
final String LATITUDE_S = "latitude_s";
final String LONGITUDE = "longitude";
final String LONGITUDE_E = "longitude_e";
final String LOCATION = "location";

SharedPreferences sPref;


final String TAG = "States";

private String Lat, Lon, Lat_S, Lon_S, Loc;

public MySaveData(String inLat, String inLon, String inLat_S,
String inLon_S, String inLoc) {

Log.d(TAG, "!!!!! SAVE DATA CONSTRACTOR !!!! " + inLat + " " + inLon
+ " " + inLat_S + " " + inLon_S + " " + inLoc);

Lat = inLat;
Lon = inLon;
Lat_S = inLat_S;
Lon_S = inLon_S;
Loc = inLoc;

}

public void SaveData() {

sPref = getPreferences(MODE_PRIVATE);
Editor ed = sPref.edit();

Log.d(TAG, "!!!!! SAVE DATA !!!! ");
Log.d(TAG, "Lat-> "+Lat);
Log.d(TAG, "Lon-> "+Lon);
Log.d(TAG, "Lat_S-> "+Lat_S);
Log.d(TAG, "Lon_S-> "+Lon_S);
Log.d(TAG, "Loc-> "+Loc);


}
}
[/syntax]

но эклипс ругается на строчку 36 sPref = getPreferences(MODE_PRIVATE);

и говорит MODE_PRIVATE can not be resolved to variable

хотя когда эта же строчка стояла в коде самой активности все было нормально

подскажите пожалуйста как поправить

Ответить