Перейдите с Activity на AppCompatActivity

Я перешел с Activity на AppCompatActivity.

Добавил это в градиент:

dependencies {
    compile "com.android.support:appcompat-v7:23.0.0"
}

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

Логкат:

    02-22 15:02:22.780 2065-2065/com.example.hansbaum.calculator I/art: Not late-enabling -Xcheck:jni (already on)
02-22 15:02:22.880 2065-2065/com.example.hansbaum.calculator D/AndroidRuntime: Shutting down VM
02-22 15:02:22.880 2065-2065/com.example.hansbaum.calculator E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                        Process: com.example.hansbaum.calculator, PID: 2065
                                                                                        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.hansbaum.calculator/com.example.hansbaum.calculator.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setTitle(java.lang.CharSequence)' on a null object reference
                                                                                            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
                                                                                            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
                                                                                            at android.app.ActivityThread.access$800(ActivityThread.java:144)
                                                                                            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
                                                                                            at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                            at android.os.Looper.loop(Looper.java:135)
                                                                                            at android.app.ActivityThread.main(ActivityThread.java:5221)
                                                                                            at java.lang.reflect.Method.invoke(Native Method)
                                                                                            at java.lang.reflect.Method.invoke(Method.java:372)
                                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
                                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
                                                                                         Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setTitle(java.lang.CharSequence)' on a null object reference
                                                                                            at com.example.hansbaum.calculator.MainActivity.onCreate(MainActivity.java:53)
                                                                                            at android.app.Activity.performCreate(Activity.java:5937)
                                                                                            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
                                                                                            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
                                                                                            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
                                                                                            at android.app.ActivityThread.access$800(ActivityThread.java:144) 
                                                                                            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
                                                                                            at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                            at android.os.Looper.loop(Looper.java:135) 
                                                                                            at android.app.ActivityThread.main(ActivityThread.java:5221) 
                                                                                            at java.lang.reflect.Method.invoke(Native Method) 
                                                                                            at java.lang.reflect.Method.invoke(Method.java:372) 
                                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
                                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
02-22 15:02:53.210 2065-2065/? I/Process: Sending signal. PID: 2065 SIG: 9

Манифест:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.hansbaum.calculator" >

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.AppCompat.Light" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

person Hans Baum    schedule 22.02.2016    source источник
comment
пожалуйста, опубликуйте крах logcat здесь   -  person Kulibin    schedule 22.02.2016
comment
мое приложение дает сбой - используйте LogCat для изучения трассировки стека Java, связанной с вашим сбоем: решить-это" title="к сожалению, мое приложение остановилось, как я могу решить эту проблему"> stackoverflow.com/questions/23353173/   -  person CommonsWare    schedule 22.02.2016
comment
хорошо, логкэт есть   -  person Hans Baum    schedule 22.02.2016


Ответы (1)


В вашем файле манифеста вам нужно использовать тему AppCompat для своей деятельности. Например:

android:theme="@style/Theme.AppCompat.Light"

Добавьте тему для своей активности в манифест:

<activity
            android:name=".MainActivity"
            android:theme="@style/Theme.AppCompat.Light"
            android:label="@string/app_name" >

Также в коде активности вы должны теперь использовать getSupportActionBar() вместо getActionBar().

В вашем файле styles.xml замените <style name="AppTheme" parent="Theme.AppCompat.Light"> на <style name="AppTheme" parent="@style/Theme.AppCompat.Light">, а в манифесте замените оба android:theme="@style/Theme.AppCompat.Light" на android:theme="@style/AppTheme".

person Kulibin    schedule 22.02.2016
comment
не могли бы вы добавить сюда файл манифеста - person Kulibin; 22.02.2016
comment
Я сделал. Спасибо за помощь ! - person Hans Baum; 22.02.2016
comment
я обновил свой ответ - person Kulibin; 22.02.2016
comment
Сбой снова. обновленный логарифм - person Hans Baum; 22.02.2016
comment
Хорошо, я знаю, что приложение запускается, но оно потеряло все функции материального дизайна, такие как цвета. - person Hans Baum; 22.02.2016
comment
снова обновил мой ответ - person Kulibin; 22.02.2016
comment
Я сделал. Приложение запускается, но темы материалов нет. - person Hans Baum; 22.02.2016
comment
Ваш первоначальный вопрос был о сбое :) Что значит, нет материальной темы? Чего вы ожидаете? - person Kulibin; 22.02.2016
comment
До того, как я переключился на AppCombatActivity, я использовал цвета материалов в моем style.xml. Теперь с AppCombatActivity у приложения нет цветов. - person Hans Baum; 22.02.2016
comment
Это произошло потому, что теперь вы используете новую тему для активности, и эта тема не из ваших стилей. теперь вам нужно установить родительскую тему @style/Theme.AppCompat.Light для вашей индивидуальной темы в styles.xml. затем вам нужно установить эту тему (вашу пользовательскую тему из стилей с новым родителем) для вашей активности в манифесте. - person Kulibin; 22.02.2016
comment
вот что я сделал: pastebin.com/PVP26uMk - person Hans Baum; 22.02.2016
comment
обновил мой ответ новыми советами - person Kulibin; 22.02.2016
comment
хорошо, тексты и кнопки редактирования текста в порядке, но цвет панели действий неправильный. - person Hans Baum; 22.02.2016
comment
попробуйте удалить android: из ‹item name=android:colorPrimary› и ‹item name=android:colorPrimaryDark›. это должно быть просто ‹item name=colorPrimary› и ‹item name=colorPrimaryDark›. - person Kulibin; 22.02.2016
comment
омг ты классный! - person Hans Baum; 22.02.2016
comment
можете пометить мой ответ как правильный :) - person Kulibin; 22.02.2016