Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 589
#1

Ошибка в Preferences в Android 4.4 - Android

22.11.2013, 10:08. Просмотров 1404. Ответов 2
Метки нет (Все метки)

Здравствуйте!
Не могу понять суть ошибки, на всех версиях Android 2.2+ программа выполнялась корректно, до выхода Kit kat...
У меня в PreferenceActivity делается проверка на версию Anddroid, а затем запускается либо Preferences with headers or just preferences... Так вот в Android 4.4 невозможно запустить Preferences с заголовками, проверку на версию убирал, пытался только для старших версий загрузить, то же самое...
Вот лог:
Кликните здесь для просмотра всего текста
11-22 00:46:14.821: D/dalvikvm(1069): GC_FOR_ALLOC freed 73K, 5% free 3333K/3484K, paused 59ms, total 60ms
11-22 00:46:14.841: D/(1069): HostConnection::get() New Host Connection established 0xb79f2ba8, tid 1069
11-22 00:46:15.071: W/EGL_emulation(1069): eglSurfaceAttrib not implemented
11-22 00:46:15.081: D/OpenGLRenderer(1069): Enabling debug mode 0
11-22 00:46:26.151: W/EGL_emulation(1069): eglSurfaceAttrib not implemented
11-22 00:46:28.851: D/AndroidRuntime(1069): Shutting down VM
11-22 00:46:28.861: W/dalvikvm(1069): threadid=1: thread exiting with uncaught exception (group=0xb3a22b90)
11-22 00:46:28.901: E/AndroidRuntime(1069): FATAL EXCEPTION: main
11-22 00:46:28.901: E/AndroidRuntime(1069): Process: com.contedevel.timetable, PID: 1069
11-22 00:46:28.901: E/AndroidRuntime(1069): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.contedevel.timetable/com.contedevel.timetable.settings.SettingActivity}: java.lang.RuntimeException: Subclasses of PreferenceActivity must override isValidFragment(String) to verify that the Fragment class is valid! com.contedevel.timetable.settings.SettingActivity has not checked if fragment com.contedevel.timetable.settings.SettingGeneralFragment is valid.
11-22 00:46:28.901: E/AndroidRuntime(1069): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2176)
11-22 00:46:28.901: E/AndroidRuntime(1069): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226)
11-22 00:46:28.901: E/AndroidRuntime(1069): at android.app.ActivityThread.access$700(ActivityThread.java:135)
11-22 00:46:28.901: E/AndroidRuntime(1069): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
11-22 00:46:28.901: E/AndroidRuntime(1069): at android.os.Handler.dispatchMessage(Handler.java:102)
11-22 00:46:28.901: E/AndroidRuntime(1069): at android.os.Looper.loop(Looper.java:137)
11-22 00:46:28.901: E/AndroidRuntime(1069): at android.app.ActivityThread.main(ActivityThread.java:4998)
11-22 00:46:28.901: E/AndroidRuntime(1069): at java.lang.reflect.Method.invokeNative(Native Method)
11-22 00:46:28.901: E/AndroidRuntime(1069): at java.lang.reflect.Method.invoke(Method.java:515)
11-22 00:46:28.901: E/AndroidRuntime(1069): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
11-22 00:46:28.901: E/AndroidRuntime(1069): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
11-22 00:46:28.901: E/AndroidRuntime(1069): at dalvik.system.NativeStart.main(Native Method)
11-22 00:46:28.901: E/AndroidRuntime(1069): Caused by: java.lang.RuntimeException: Subclasses of PreferenceActivity must override isValidFragment(String) to verify that the Fragment class is valid! com.contedevel.timetable.settings.SettingActivity has not checked if fragment com.contedevel.timetable.settings.SettingGeneralFragment is valid.
11-22 00:46:28.901: E/AndroidRuntime(1069): at android.preference.PreferenceActivity.isValidFragment(PreferenceActivity.java:898)
11-22 00:46:28.901: E/AndroidRuntime(1069): at android.preference.PreferenceActivity.switchToHeaderInner(PreferenceActivity.java:1179)
11-22 00:46:28.901: E/AndroidRuntime(1069): at android.preference.PreferenceActivity.switchToHeader(PreferenceActivity.java:1199)
11-22 00:46:28.901: E/AndroidRuntime(1069): at android.preference.PreferenceActivity.onCreate(PreferenceActivity.java:545)
11-22 00:46:28.901: E/AndroidRuntime(1069): at com.contedevel.timetable.settings.SettingActivity.onCreate(SettingActivity.java:33)
11-22 00:46:28.901: E/AndroidRuntime(1069): at android.app.Activity.performCreate(Activity.java:5243)
11-22 00:46:28.901: E/AndroidRuntime(1069): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
11-22 00:46:28.901: E/AndroidRuntime(1069): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2140)
11-22 00:46:28.901: E/AndroidRuntime(1069): ... 11 more
11-22 00:46:35.781: I/Process(1069): Sending signal. PID: 1069 SIG: 9
...
11-22 00:48:23.931: D/(1218): HostConnection::get() New Host Connection established 0xb79f2080, tid 1218
11-22 00:48:24.101: W/EGL_emulation(1218): eglSurfaceAttrib not implemented
11-22 00:48:24.111: D/OpenGLRenderer(1218): Enabling debug mode 0
11-22 00:48:40.291: W/EGL_emulation(1218): eglSurfaceAttrib not implemented
11-22 00:48:42.081: D/dalvikvm(1218): GC_FOR_ALLOC freed 129K, 6% free 3560K/3768K, paused 53ms, total 69ms
11-22 00:48:42.271: D/AndroidRuntime(1218): Shutting down VM
11-22 00:48:42.271: W/dalvikvm(1218): threadid=1: thread exiting with uncaught exception (group=0xb3a22b90)
11-22 00:48:42.321: E/AndroidRuntime(1218): FATAL EXCEPTION: main
11-22 00:48:42.321: E/AndroidRuntime(1218): Process: com.contedevel.timetable, PID: 1218
11-22 00:48:42.321: E/AndroidRuntime(1218): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.contedevel.timetable/com.contedevel.timetable.settings.SettingActivity}: java.lang.RuntimeException: Subclasses of PreferenceActivity must override isValidFragment(String) to verify that the Fragment class is valid! com.contedevel.timetable.settings.SettingActivity has not checked if fragment com.contedevel.timetable.settings.SettingGeneralFragment is valid.
11-22 00:48:42.321: E/AndroidRuntime(1218): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2176)
11-22 00:48:42.321: E/AndroidRuntime(1218): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226)
11-22 00:48:42.321: E/AndroidRuntime(1218): at android.app.ActivityThread.access$700(ActivityThread.java:135)
11-22 00:48:42.321: E/AndroidRuntime(1218): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
11-22 00:48:42.321: E/AndroidRuntime(1218): at android.os.Handler.dispatchMessage(Handler.java:102)
11-22 00:48:42.321: E/AndroidRuntime(1218): at android.os.Looper.loop(Looper.java:137)
11-22 00:48:42.321: E/AndroidRuntime(1218): at android.app.ActivityThread.main(ActivityThread.java:4998)
11-22 00:48:42.321: E/AndroidRuntime(1218): at java.lang.reflect.Method.invokeNative(Native Method)
11-22 00:48:42.321: E/AndroidRuntime(1218): at java.lang.reflect.Method.invoke(Method.java:515)
11-22 00:48:42.321: E/AndroidRuntime(1218): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
11-22 00:48:42.321: E/AndroidRuntime(1218): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
11-22 00:48:42.321: E/AndroidRuntime(1218): at dalvik.system.NativeStart.main(Native Method)
11-22 00:48:42.321: E/AndroidRuntime(1218): Caused by: java.lang.RuntimeException: Subclasses of PreferenceActivity must override isValidFragment(String) to verify that the Fragment class is valid! com.contedevel.timetable.settings.SettingActivity has not checked if fragment com.contedevel.timetable.settings.SettingGeneralFragment is valid.
11-22 00:48:42.321: E/AndroidRuntime(1218): at android.preference.PreferenceActivity.isValidFragment(PreferenceActivity.java:898)
11-22 00:48:42.321: E/AndroidRuntime(1218): at android.preference.PreferenceActivity.switchToHeaderInner(PreferenceActivity.java:1179)
11-22 00:48:42.321: E/AndroidRuntime(1218): at android.preference.PreferenceActivity.switchToHeader(PreferenceActivity.java:1199)
11-22 00:48:42.321: E/AndroidRuntime(1218): at android.preference.PreferenceActivity.onCreate(PreferenceActivity.java:545)
11-22 00:48:42.321: E/AndroidRuntime(1218): at com.contedevel.timetable.settings.SettingActivity.onCreate(SettingActivity.java:33)
11-22 00:48:42.321: E/AndroidRuntime(1218): at android.app.Activity.performCreate(Activity.java:5243)
11-22 00:48:42.321: E/AndroidRuntime(1218): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
11-22 00:48:42.321: E/AndroidRuntime(1218): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2140)
11-22 00:48:42.321: E/AndroidRuntime(1218): ... 11 more


Я не понимаю, что он просит переопределить, у меня OnCreate переопределена, и что за not checked?
Вот активити:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package com.contedevel.timetable.settings;
 
import java.util.Calendar;
import java.util.List;
 
import com.contedevel.timetable.MainActivity;
import com.contedevel.timetable.R;
import com.contedevel.timetable.helpers.SettingsHelper;
 
import android.annotation.TargetApi;
import android.app.ActionBar;
import android.app.DatePickerDialog;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference.OnPreferenceClickListener;
import android.view.MenuItem;
 
public class SettingActivity extends PreferenceActivity {
    //Initialization of variables
    SettingsHelper sh;
    Context context;
    
    @Override
    protected void onCreate (Bundle savedInstanceState) {
        
        super.onCreate(savedInstanceState);
        //Check Android version
        if(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
            addPreferencesFromResource(R.xml.old_activity_preferences);
            Preference lvTimetableMode = (Preference) 
                    findPreference(getString(R.string.key_timetablemode));
            final Preference sOddWeek = (Preference) 
                    findPreference(getString(R.string.key_oddweek));
            sh = new  SettingsHelper(this);
            
            context = this;
            
            if(sh.getMode() == 1) {
                sOddWeek.setEnabled(true);
            }
            else {
                sOddWeek.setEnabled(false);
            }
            
            lvTimetableMode.setOnPreferenceChangeListener(new OnPreferenceChangeListener(){
 
                @Override
                public boolean onPreferenceChange(Preference preference,
                        Object newValue) {
                    // TODO Auto-generated method stub
                    if (newValue.toString().length() > 0) {
                        if(newValue.toString().equalsIgnoreCase("1")) {
                            sOddWeek.setEnabled(true);
                        }
                        else {
                            sOddWeek.setEnabled(false);
                        }
                        return true;
                    }
                    return false;
                }});
            
            sOddWeek.setOnPreferenceClickListener(new OnPreferenceClickListener() {
 
                @Override
                public boolean onPreferenceClick(Preference preference) {
                    // TODO Auto-generated method stub
                    Calendar c = Calendar.getInstance();
                    DatePickerDialog dpDialog = 
                            new DatePickerDialog(context, null, 
                                    2013, 8, 1);
                    dpDialog.setTitle(R.string.title_dialog_datepicker);
                    dpDialog.show();
                    return true;
                }});
        }
        else {
            ActionBar actionBar = getActionBar();
            actionBar.setDisplayHomeAsUpEnabled(true);
        }
    }
    
    //Headers for Android v11+
    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    public void onBuildHeaders (List<Header> target) {
        loadHeadersFromResource(R.xml.activity_preferenceheaders, target);
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            switch (item.getItemId()) {
            case android.R.id.home:
                Intent intent = new Intent(this, MainActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
                return true;
            default:
                return super.onOptionsItemSelected(item);
            }
        }
        return super.onOptionsItemSelected(item);
    }
}

P.S. буду очень признателен за помощь
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2013, 10:08     Ошибка в Preferences в Android 4.4
Посмотрите здесь:

Android Preferences работает не корректно
Android Шаблон Preferences Framework для различных объектов
Ошибка в Preferences Framework Android
Preferences из Applicaton Android
Android Preferences Framework: ActionBar
Как получить preferences из broadcast reciver? Android
Android Где найти Preferences в Android Studio 1.2.2
Android Нужно сохранить 2000 бит посредством Preferences
Android Preferences
Preferences Android
Свои компоненты в Preferences для выбора времени, даты, числа, цвета Android
Почему не обнавляются preferences без перезапуска Activity (Canvas) Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wenceslaus
Android Developer
129 / 129 / 4
Регистрация: 05.07.2013
Сообщений: 205
22.11.2013, 11:57     Ошибка в Preferences в Android 4.4 #2
contedevel, судя по всему, это новая фича в KitKat. Суть в том, что теперь перед вызовом необходимо убедиться, действительно ли фрагмент относится PreferenceActivity или каким-то мистическим образом был вызван иной фрагмент. Это актуально для нескольких экранов настроек с несколькими фрагментами, где имя каждого фрагмента необходимо проверить на соответствие. Однако в вашем случае будет достаточно переопределить метод isValidFragment() следующим образом:
Java
1
2
3
4
5
@TargetApi( Build.VERSION_CODES.KITKAT )
@Override
protected boolean isValidFragment( String fragmentName ) {
    return true;
}
Примечательно, что на всех предыдущих версиях isValidFragment() всегда будет возвращать true.
contedevel
57 / 55 / 8
Регистрация: 07.10.2012
Сообщений: 589
22.11.2013, 22:17  [ТС]     Ошибка в Preferences в Android 4.4 #3
Спасибо большое! Я, наверное, пропустил это, когда читал на dev-ке.
Yandex
Объявления
22.11.2013, 22:17     Ошибка в Preferences в Android 4.4
Ответ Создать тему
Опции темы

Текущее время: 20:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru