Android studio приложение вылетает при запуске [дубликат]

178
26 мая 2018, 19:20

На данный вопрос уже ответили:

  • Что такое Null Pointer Exception и как его исправить? 3 ответа

При компиляции приложение почему-то вылетает. Я только первый месяц работаю в Android Studio и сейчас начал разбираться c navigation drawer. Буду очень благодарен за советы и помощь в решении проблемы.

05-18 05:20:45.238 14998-14998/com.example.jone1.navig E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.jone1.navig, PID: 14998 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.jone1.navig/com.example.jone1.navig.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.app.ActionBarDrawerToggle.syncState()' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2706) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2767) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1514) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:163) at android.app.ActivityThread.main(ActivityThread.java:6221) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.app.ActionBarDrawerToggle.syncState()' on a null object reference at com.example.jone1.navig.MainActivity.onPostCreate(MainActivity.java:106) at android.app.Instrumentation.callActivityOnPostCreate(Instrumentation.java:1200) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2688) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2767)  at android.app.ActivityThread.-wrap12(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1514)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:163)  at android.app.ActivityThread.main(ActivityThread.java:6221)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)  05-18 05:20:49.824 14998-14998/com.example.jone1.navig I/Process: Sending signal. PID: 14998 SIG: 9

manifests:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.jone1.navig">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".Main5Activity"
            android:label="@string/title_activity_main5" />
        <activity android:name=".Main6Activity" />
        <activity android:name=".Main7Activity"></activity>
    </application>
</manifest>

MainActivity:

package com.example.jone1.navig;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.view.View;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
public class MainActivity extends AppCompatActivity {
    private DrawerLayout mDrawer;
    private Toolbar toolbar;
    // Убедитесь, что используется версия
    // android.support.v7.app.ActionBarDrawerToggle.
    // android.support.v4.app.ActionBarDrawerToggle устарел.
    private ActionBarDrawerToggle drawerToggle;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        final NavigationView nvDrawer;
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Установить Toolbar для замены ActionBar'а.
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        // Найти наш view drawer'а
        mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        // Настроить view drawer'а
        // Найти наш view drawer'а
        nvDrawer = (NavigationView) findViewById(R.id.nvView);
        // Настроить view drawer'а
        setupDrawerContent(nvDrawer);
    }
    private void setupDrawerContent(NavigationView navigationView) {
        navigationView.setNavigationItemSelectedListener(
                new NavigationView.OnNavigationItemSelectedListener() {
                    @Override
                    public boolean onNavigationItemSelected(MenuItem menuItem) {
                        selectDrawerItem(menuItem);
                        return true;
                    }
                });
    }
    private ActionBarDrawerToggle setupDrawerToggle() {
        // Примечание: Убедитесь, что вы передаёте допустимую ссылку
        // на toolbar
        // ActionBarDrawToggle() не предусматривает в ней
        // необходимости и не будет отображать иконку гамбургера без
        // неё
        return new ActionBarDrawerToggle(this, mDrawer, toolbar, R.string.drawer_open,  R.string.drawer_close);
    }
    public void selectDrawerItem(MenuItem menuItem) {
        // Создать новый фрагмент и задать фрагмент для отображения
        // на основе нажатия на элемент навигации
        Fragment fragment = null;
        Class fragmentClass;
        switch(menuItem.getItemId()) {
            case R.id.nav_first_fragment:
                fragmentClass = Main5Activity.class;
                break;
            case R.id.nav_second_fragment:
                fragmentClass = Main6Activity.class;
                break;
            case R.id.nav_third_fragment:
                fragmentClass = Main7Activity.class;
                break;
            default:
                fragmentClass = FirstFragment.class;
        }
        try {
            fragment = (Fragment) fragmentClass.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        // Вставить фрагмент, заменяя любой существующий
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit();
        // Выделение существующего элемента выполнено с помощью
        // NavigationView
        menuItem.setChecked(true);
        // Установить заголовок для action bar'а
        setTitle(menuItem.getTitle());
        // Закрыть navigation drawer
        mDrawer.closeDrawers();
    }
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        // Синхронизировать состояние переключения после того, как
        // возникнет onRestoreInstanceState
        drawerToggle.syncState();
    }
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        // Передать любые изменения конфигурации переключателям
        // drawer'а
        drawerToggle.onConfigurationChanged(newConfig);
    }
    // ...
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Действие home/up action bar'а должно открывать или закрывать drawer.
        if (drawerToggle.onOptionsItemSelected(item)) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

Main5Activity(код Main6Activity, Main7Activity выглядит примерно также): package com.example.jone1.navig;

import android.os.Bundle;
import android.app.Activity;
public class Main5Activity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main5);
    }
}

Все делал по примеру взятому с этого сайта

Answer 1

У вас в onPostCreate вызывается drawerToggle.syncState(), но при этом вы нигде не инициализируете drawerToggle, там всегда null.

READ ALSO
Случайная генерация двух дат до 30 дней

Случайная генерация двух дат до 30 дней

Есть два поля начальная дата и конечная дата На входе получить начальная дата c текущей датой, конечная дата должна быть выше начальная дата,...

223
Сортировка List Java [закрыт]

Сортировка List Java [закрыт]

Имеется list с несколькими значениямиНеобходимо сделать так, чтобы одно из значений всегда находилось внизу списка, независимо от того, чему...

189
Ошибка при сохранении объекта в базу данных Oracle

Ошибка при сохранении объекта в базу данных Oracle

У меня есть две таблицы USER_ и ORDER_Создал классы:

227