Урок 71. Preferences как настройки приложения. PreferenceActivity

Обсуждение уроков
Аватара пользователя
-Alex-
Сообщения: 30
Зарегистрирован: 26 ноя 2013, 09:40

Re: Урок 71. Preferences как настройки приложения. Preferenc

Сообщение -Alex- » 19 дек 2013, 17:04

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

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


12-19 14:03:18.069: D/myLogs(573): значение List = не выбрано
12-19 14:03:18.078: D/AndroidRuntime(573): Shutting down VM
12-19 14:03:18.078: W/dalvikvm(573): threadid=1: thread exiting with uncaught exception (group=0x40015560)
12-19 14:03:18.129: E/AndroidRuntime(573): FATAL EXCEPTION: main
12-19 14:03:18.129: E/AndroidRuntime(573): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.oncreate_001_1_word/com.example.oncreate_001_1_word.MainActivity}: java.lang.NumberFormatException: unable to parse 'не выбрано' as integer
12-19 14:03:18.129: E/AndroidRuntime(573): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
12-19 14:03:18.129: E/AndroidRuntime(573): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
12-19 14:03:18.129: E/AndroidRuntime(573): 	at android.app.ActivityThread.access$1500(ActivityThread.java:117)
12-19 14:03:18.129: E/AndroidRuntime(573): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
12-19 14:03:18.129: E/AndroidRuntime(573): 	at android.os.Handler.dispatchMessage(Handler.java:99)
12-19 14:03:18.129: E/AndroidRuntime(573): 	at android.os.Looper.loop(Looper.java:123)
12-19 14:03:18.129: E/AndroidRuntime(573): 	at android.app.ActivityThread.main(ActivityThread.java:3683)
12-19 14:03:18.129: E/AndroidRuntime(573): 	at java.lang.reflect.Method.invokeNative(Native Method)
12-19 14:03:18.129: E/AndroidRuntime(573): 	at java.lang.reflect.Method.invoke(Method.java:507)
12-19 14:03:18.129: E/AndroidRuntime(573): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-19 14:03:18.129: E/AndroidRuntime(573): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-19 14:03:18.129: E/AndroidRuntime(573): 	at dalvik.system.NativeStart.main(Native Method)
12-19 14:03:18.129: E/AndroidRuntime(573): Caused by: java.lang.NumberFormatException: unable to parse 'не выбрано' as integer
12-19 14:03:18.129: E/AndroidRuntime(573): 	at java.lang.Integer.parse(Integer.java:383)
12-19 14:03:18.129: E/AndroidRuntime(573): 	at java.lang.Integer.parseInt(Integer.java:372)
12-19 14:03:18.129: E/AndroidRuntime(573): 	at java.lang.Integer.parseInt(Integer.java:332)
12-19 14:03:18.129: E/AndroidRuntime(573): 	at com.example.oncreate_001_1_word.MainActivity.onResume(MainActivity.java:281)
12-19 14:03:18.129: E/AndroidRuntime(573): 	at com.example.oncreate_001_1_word.MainActivity.onCreate(MainActivity.java:84)
12-19 14:03:18.129: E/AndroidRuntime(573): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
12-19 14:03:18.129: E/AndroidRuntime(573): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
12-19 14:03:18.129: E/AndroidRuntime(573): 	... 11 more

Получается, что в методе onResume () не удается получить ключ "list" в выражении:
listValue = sp.getString("list", "не выбрано");
в логах выводится значение List = не выбрано.
Вот интересно, что надо сделать, чтобы onResume () увидел ключ?

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 71. Preferences как настройки приложения. Preferenc

Сообщение Mikhail_dev » 19 дек 2013, 17:29

Дефолтное значение в настройках устанавливаете? Самое просто сейчас это вместо "не выбрано" поставить дефолтное значение. и делать приведение типов

Аватара пользователя
-Alex-
Сообщения: 30
Зарегистрирован: 26 ноя 2013, 09:40

Re: Урок 71. Preferences как настройки приложения. Preferenc

Сообщение -Alex- » 19 дек 2013, 17:36

Спасибо. Не буду разбираться, почему так происходит.
Поставил вместо "не выбрано" значение "1".
Всё заработало. Спасибо еще раз.

snowkam
Сообщения: 162
Зарегистрирован: 21 мар 2013, 11:22

Re: Урок 71. Preferences как настройки приложения. Preferenc

Сообщение snowkam » 15 май 2014, 09:54

Добрый день
Ребята подскажите можно как нибудь расширить число символов в параметре
android:summary=""
в блоке
<CheckBoxPreference>
или может быть есть возможность вставить туда TextView ?????
Спасибо!

Олег Драч
Сообщения: 5
Зарегистрирован: 02 мар 2015, 14:55

Re: Урок 71. Preferences как настройки приложения. Preferenc

Сообщение Олег Драч » 24 мар 2015, 00:47

addPreferencesFromResource(R.xml.pref);
зачеркивает и не могу запустить урок. как бороться. что значит deprecated ?

Anikey82
Сообщения: 5
Зарегистрирован: 09 авг 2015, 15:49

Re: Урок 71. Preferences как настройки приложения. Preferenc

Сообщение Anikey82 » 09 авг 2015, 15:58

При нажатии на настройки закрывается с ошибкой, в чем может быть причина?
MainActivity

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

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Pass the event to ActionBarDrawerToggle, if it returns
        // true, then it has handled the app icon touch event
        if (mDrawerToggle.onOptionsItemSelected(item)) {
            return true;
        }
        // Handle action buttons
        switch(item.getItemId()) {
            case R.id.action_search:
                // Show toast about click.
                Toast.makeText(this, R.string.action_search, Toast.LENGTH_SHORT).show();
                return true;
            case R.id.action_settings:
                Intent intent = new Intent(String.valueOf(PrefActivity.class));
                startActivity(intent);
                return true;
            
            default:
                return super.onOptionsItemSelected(item);
        }
    }
activity_main.xml

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

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <!-- The main content view -->
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <!-- The navigation drawer -->
    <ListView android:id="@+id/left_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp"
        android:background="#111"/>
</android.support.v4.widget.DrawerLayout>
PreferenceActivity

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

public class PrefActivity extends PreferenceActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.pref);
    }
}
pref.xml

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

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    xmlns:android="http://schemas.android.com/apk/res/android">
    <CheckBoxPreference
        android:key="notif"
        android:summary="Enable notifications"
        android:title="Notifications">
    </CheckBoxPreference>
    <EditTextPreference
        android:key="address"
        android:summary="Address for notifications"
        android:title="Address">
    </EditTextPreference>
</PreferenceScreen>

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 71. Preferences как настройки приложения. Preferenc

Сообщение Foenix » 09 авг 2015, 18:38

по ссылке в подписи
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Foxy
Сообщения: 13
Зарегистрирован: 15 дек 2016, 14:57
Откуда: Volgograd
Контактная информация:

Re: Урок 71. Preferences как настройки приложения. Preferenc

Сообщение Foxy » 12 янв 2017, 14:28

Извините за глупость, может кто объяснить один момент?
При вызове onResume по идее постоянно выполняются:

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

Boolean notif = sp.getBoolean("notif", false);
String address = sp.getString("address", "");
Что по идее должно приводить к тому, что чекбокс в настройках будет опять становиться false, а поле с адресом - "" (т.е. пустым). Я что-то не улавливаю, почему происходит иначе?

WKBAPKA
Сообщения: 32
Зарегистрирован: 03 янв 2014, 14:28

Re: Урок 71. Preferences как настройки приложения. Preferenc

Сообщение WKBAPKA » 04 ноя 2017, 13:13

В новом API метод addPreferenceFromResurce в методе onCreate объявлен как Deprecated
Теперь нужно работать через PreferenceFragment
Простой пример:

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

**
 * Created by WKBAPKA-ADMIN on 04.11.2017.
 */

public class PrefActivity extends PreferenceActivity {
    private static String LOG_TAG = "myLog";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getFragmentManager().beginTransaction().replace(android.R.id.content, new PrefFragment1()).commit();
        Log.d(LOG_TAG,"onCreatePrefActivity");


    }

    public static class PrefFragment1 extends PreferenceFragment {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //PreferenceManager.setDefaultValues(getActivity());
            addPreferencesFromResource(R.xml.pref);
        }


    }

}

И еще момент:

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

itemMenu.setIntent(new Intent(this,PrefActivity))
не срабатывает, если забыть объявить Activity в манифесте. Но и не вываливается по ошибке :)
если вызов повесить на кнопку, приложение скукожится.

Ответить