-3

When I run the program I get NullPointerException on the line albumlist.add(0, recentAlbum). I have checked other classes which is good and I even initialized the list But i cant figure out where I went wrong.

public class MainActivity extends AppCompatActivity {

private static final String TAG = MainActivity.class.getSimpleName();
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;

// Navigation drawer title
private CharSequence mDrawerTitle;
private CharSequence mTitle;
private List<Category> albumsList;
private ArrayList<NavDrawerItem> navDrawerItems = new ArrayList<NavDrawerItem>();
private NavDrawerListAdapter adapter;


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

    mTitle = mDrawerTitle = getTitle();

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerList = (ListView) findViewById(R.id.list_slidermenu);




    // Getting the albums from shared preferences
    albumsList = AppController.getInstance().getPrefManager().getCategory();

    // Insert "Recently Added" in navigation drawer first position
    Category recentAlbum = new Category(null,
            getString(R.string.nav_drawer_recently_added));

    albumsList.clear();

    albumsList.add(0, recentAlbum);

    // Loop through albums in add them to navigation drawer adapter
    for (Category a : albumsList) {
        navDrawerItems.add(new NavDrawerItem(a.getId(), a.getTitle()));
    }

    mDrawerList.setOnItemClickListener(new SlideMenuClickListener());

    // Setting the nav drawer list adapter
    adapter = new NavDrawerListAdapter(getApplicationContext(),
            navDrawerItems);
    mDrawerList.setAdapter(adapter);

    // Enabling action bar app icon and behaving it as toggle button
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setIcon(
            new ColorDrawable(getResources().getColor(
                    android.R.color.transparent)));

    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
            R.drawable.side_nav_bar, R.string.app_name, R.string.app_name) {
        public void onDrawerClosed(View view) {
            getActionBar().setTitle(mTitle);
            // calling onPrepareOptionsMenu() to show action bar icons
            invalidateOptionsMenu();
        }

        public void onDrawerOpened(View drawerView) {
            getActionBar().setTitle(mDrawerTitle);
            // calling onPrepareOptionsMenu() to hide action bar icons
            invalidateOptionsMenu();
        }
    };
    mDrawerLayout.setDrawerListener(mDrawerToggle);

    if (savedInstanceState == null) {
        // on first time display view for first nav item
        displayView(0);


    }

}

/**
 * Navigation drawer menu item click listener
 */

private class SlideMenuClickListener implements AdapterView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
                            long id) {
        // display view for selected nav drawer item
        displayView(position);
    }
}


public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_scrolling, menu);
    return true;
}

/**
 * On menu item selected
 */
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // toggle nav drawer on selecting action bar app icon/title
    if (mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }
    // Handle action bar actions click
    switch (item.getItemId()) {
        case R.id.action_settings:
            // Selected settings menu item
            // launch Settings activity
           Intent intent = new Intent(MainActivity.this,
                    SettingsActivity.class);
             startActivity(intent);
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

/* *
 * Called when invalidateOptionsMenu() is triggered
 */
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    // if nav drawer is opened, hide the action items
    boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
    menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
    return super.onPrepareOptionsMenu(menu);
}

/**
 * Diplaying fragment view for selected nav drawer list item
 */
private void displayView(int position) {
    // update the main content by replacing fragments
    Fragment fragment = null;
    switch (position) {
        case 0:
            // Recently added item selected
            // don't pass album id to home fragment
            fragment = GridFragment.newInstance(null);
            break;

        default:
            // selected wallpaper category
            // send album id to home fragment to list all the wallpapers
            String albumId = albumsList.get(position).getId();
            fragment = GridFragment.newInstance(albumId);
            break;
    }

    if (fragment != null) {
        android.app.FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.frame_container, fragment).commit();

        // update selected item and title, then close the drawer
        mDrawerList.setItemChecked(position, true);
        mDrawerList.setSelection(position);
        setTitle(albumsList.get(position).getTitle());
        mDrawerLayout.closeDrawer(mDrawerList);
    } else {
        // error in creating fragment
        Log.e(TAG, "Error in creating fragment");
    }
}

@Override
public void setTitle(CharSequence title) {
    mTitle = title;
    getSupportActionBar().setTitle(mTitle);
}

/**
 * When using the ActionBarDrawerToggle, you must call it during
 * onPostCreate() and onConfigurationChanged()...
 */

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    // Pass any configuration change to the drawer toggls
    mDrawerToggle.onConfigurationChanged(newConfig);
} }

Here is the Stack trace

Process: com.thedreamlight.thewallyapp, PID: 4645
  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.thedreamlight.thewallyapp/com.thedreamlight.thewallyapp.MainActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference
 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2479)
 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2541)
 at android.app.ActivityThread.access$1000(ActivityThread.java:168)
 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1436)
 at android.os.Handler.dispatchMessage(Handler.java:111)
 at android.os.Looper.loop(Looper.java:194)
 at android.app.ActivityThread.main(ActivityThread.java:5628)
 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:956)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:751)
 Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference
 at com.thedreamlight.thewallyapp.MainActivity.onCreate(MainActivity.java:61)
 at android.app.Activity.performCreate(Activity.java:6001)
 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1111)
 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2432)
 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2541) 
 at android.app.ActivityThread.access$1000(ActivityThread.java:168) 
 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1436) 
 at android.os.Handler.dispatchMessage(Handler.java:111) 
 at android.os.Looper.loop(Looper.java:194) 
 at android.app.ActivityThread.main(ActivityThread.java:5628) 
 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:956) 
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:751) 
Cœur
  • 37,241
  • 25
  • 195
  • 267
  • Check both your list object and also category object, it may be possible any one of it is null and therefore you are getting error – Vickyexpert Jul 02 '16 at 05:19
  • 1
    Please fix your illegible formatting ASAP and stop asking for help ASAP while you're at it. You're not paying for this: there is no service level agreement, and a slovenly question is far less likely to attract quality answers. – user207421 Jul 02 '16 at 05:31

2 Answers2

0

Initialize albumList array list like this:

private List<Category> albumsList = new ArrayList<>();
Sagar Jogadia
  • 1,330
  • 1
  • 16
  • 25
0
Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference

In a nutshell, you are trying to use a null variable,which will through NullPointerException.

private List<Category> albumsList; that you declare was not initiated yet, so you need to initialize it as follows:

private List<Category> albumsList = new ArrayList<>();
Hassan Nahhal
  • 31
  • 1
  • 8