-1

Я получил ошибку исключения nullpointer в моей функции фрагментации.Исключение Nullpointer - FragmentActivity

Ниже журнал кошка:

11-04 06:29:51.550: E/AndroidRuntime(19286): FATAL EXCEPTION: main 
11-04 06:29:51.550: E/AndroidRuntime(19286): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dooba.beta/com.dooba.beta.MainActivity}: java.lang.NullPointerException 
11-04 06:29:51.550: E/AndroidRuntime(19286): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) 
11-04 06:29:51.550: E/AndroidRuntime(19286): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
11-04 06:29:51.550: E/AndroidRuntime(19286): at android.app.ActivityThread.access$600(ActivityThread.java:130) 
11-04 06:29:51.550: E/AndroidRuntime(19286): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
11-04 06:29:51.550: E/AndroidRuntime(19286): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-04 06:29:51.550: E/AndroidRuntime(19286): at android.os.Looper.loop(Looper.java:137) 
11-04 06:29:51.550: E/AndroidRuntime(19286): at android.app.ActivityThread.main(ActivityThread.java:4745) 
11-04 06:29:51.550: E/AndroidRuntime(19286): at java.lang.reflect.Method.invokeNative(Native Method) 
11-04 06:29:51.550: E/AndroidRuntime(19286): at java.lang.reflect.Method.invoke(Method.java:511) 
11-04 06:29:51.550: E/AndroidRuntime(19286): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
11-04 06:29:51.550: E/AndroidRuntime(19286): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
11-04 06:29:51.550: E/AndroidRuntime(19286): at dalvik.system.NativeStart.main(Native Method) 
11-04 06:29:51.550: E/AndroidRuntime(19286): Caused by: java.lang.NullPointerException 
11-04 06:29:51.550: E/AndroidRuntime(19286): at com.dooba.beta.MainActivity.onCreate(MainActivity.java:51) 
11-04 06:29:51.550: E/AndroidRuntime(19286): at android.app.Activity.performCreate(Activity.java:5008) 
11-04 06:29:51.550: E/AndroidRuntime(19286): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
11-04 06:29:51.550: E/AndroidRuntime(19286): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 
11-04 06:29:51.550: E/AndroidRuntime(19286): ... 11 more 

Я считаю, что ошибка происходит в этих строках:

mDrawerList.setAdapter(new ArrayAdapter<String>(getActionBar() 
     .getThemedContext(), android.R.layout.simple_list_item_1, 
     mOptionMenu)); 

Ниже весь код вида деятельности:

import android.app.ActionBar; 
import android.app.Activity; 
import android.content.res.Configuration; 
import android.os.Bundle; 
import android.support.v4.app.ActionBarDrawerToggle; 
import android.support.v4.app.ActivityCompat; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 

import android.support.v4.app.FragmentManager; 
import android.support.v4.widget.DrawerLayout; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.support.v7.app.ActionBarActivity; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.RelativeLayout; 
import android.widget.Toast; 

public class MainActivity extends FragmentActivity { 

    private String[] mOptionMenu; 
    private DrawerLayout mDrawerLayout; 
    private RelativeLayout mDrawerRelativeLayout; 
    private ListView mDrawerList; 
    private ActionBarDrawerToggle mDrawerToggle; 

    private CharSequence mTitleSection; 
    private CharSequence mTitleApp; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 



     mOptionMenu = new String[] { "Opción 1", "Opción 2", "Opción 3" }; 
     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     mDrawerRelativeLayout = (RelativeLayout) 
     findViewById(R.id.left_drawer); 
     mDrawerList = (ListView) findViewById(R.id.list_view_drawer); 
     mDrawerList.setAdapter(new ArrayAdapter<String>(getActionBar() 
     .getThemedContext(), android.R.layout.simple_list_item_1, 
     mOptionMenu)); 

     mDrawerList.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
     int position, long id) { 

     Fragment fragment = null; 

     switch (position) { 
     case 0: 
     fragment = new FirstFragment(); 
     break; 
     case 1: 
     fragment = new SecondFragment(); 
     break; 
     case 2: 
     fragment = new ThirdFragment(); 
     break; 
     } 

     FragmentManager fragmentManager = getSupportFragmentManager(); 

     fragmentManager.beginTransaction() 
     .replace(R.id.content_frame, fragment).commit(); 

     mDrawerList.setItemChecked(position, true); 

     mTitleSection = mOptionMenu[position]; 
     getActionBar().setTitle(mTitleSection); 

     mDrawerLayout.closeDrawer(mDrawerRelativeLayout); 
     } 
     }); 
     mDrawerList.setItemChecked(0, true); 
     mTitleSection = getTitle(); 
     mTitleApp = getTitle(); 

     mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, 
     R.drawable.ic_drawer, R.string.drawer_open, 
     R.string.drawer_close) { 

     public void onDrawerClosed(View view) { 
     getActionBar().setTitle(mTitleSection); 
     ActivityCompat.invalidateOptionsMenu(MainActivity.this); 
     } 

     public void onDrawerOpened(View drawerView) { 
     getActionBar().setTitle(mTitleSection); 
     ActivityCompat.invalidateOptionsMenu(MainActivity.this); 
     } 
     }; 

     mDrawerLayout.setDrawerListener(mDrawerToggle); 

     getActionBar().setDisplayHomeAsUpEnabled(true); 
     getActionBar().setHomeButtonEnabled(true); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     getMenuInflater().inflate(R.menu.main_activity_actions, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     if (mDrawerToggle.onOptionsItemSelected(item)) { 
      return true; 
     } 

     switch (item.getItemId()) { 
     case R.id.action_settings: 
      Toast.makeText(this, "Settings", Toast.LENGTH_SHORT).show(); 
      ; 
      break; 
     default: 
      return super.onOptionsItemSelected(item); 
     } 

     return true; 
    } 

    @Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
     super.onPostCreate(savedInstanceState); 
     mDrawerToggle.syncState(); 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     mDrawerToggle.onConfigurationChanged(newConfig); 
    } 
} 

Если какое-либо разъяснение необходимо, дайте мне знать. Спасибо заранее.

+0

Какова ценность getActionBar() и mDrawerList? – StackFlowed

+0

Самый простой способ выяснить, что такое «null», - отделить все методы и переменные этой строки ошибок от их собственных переменных, а затем поставить там точку останова и выполнить отладку – nem035

+0

за ваш ответ. Что вы точно подразумеваете по значению getActionBar? – John

ответ

1

Вместо

getActionBar().getThemedContext() 

использование this

+0

Благодарим вас за предложение. После применения этого метода я получаю следующую ошибку исключения nullpoint в следующей строке:getActionBar(). SetDisplayHomeAsUpEnabled (true); – John

+0

Я не уверен, но я думаю, что это зависит от темы, которую вы используете. Если ваша тема приложения не имеет панели действий, вы получаете null. Если ваша тема имеет actioj bar, то пусть ваша деятельность расширяет ActionBarActivity: это подкласс FragmentActivity, поэтому у вас не должно быть проблем, вместо вызова getActionBar() вы должны вызвать getSupportActionBar(), потому что FragmentActivity anf ActionBarActivity является частью библиотеки поддержки. Повторяю, я не уверен на 100%, дайте мне знать, если вы нашли решение – rickyalbert

+0

это тема, используемая для приложения или activity @ style/Theme.AppCompat.Light ">, и это тема для стиля панели действий used @ style/Widget.AppCompat.ActionBar – John

3

Поскольку вы импортируете импорта android.support.v7.app.ActionBarActivity, я думаю, вы должны использовать

getSupportActionBar() 

вместо

getActionBar() 
+0

Поскольку я хочу запустить это на более ранней версии Android (ниже 5.0) Я решил использовать getActionBar, с которого начинаются проблемы – John

+0

Я думаю, это правильный ответ. Вы пытались getSupportActionBar()? – San

+0

getSupportActionBar() доступен из API v7 (включая v21) getActionBar только что начался с версии v11 (включая v21) Важно, чтобы ActionBarActivity вы ссылались в Activity, который отображает фрагмент. – Lukas