2

I'm attempting to add actions to my context menu, namely, edit and delete. These actions will edit or delete entries in a database table. When the either edit or delete option is pressed the table "db_table" is supposed to be accessed to retrieve the "friend" row which corresponds to an id primary key. The id is determined by using "info.position" and dManager.retrieveFriend() is used to retrieve the row.

When ...dManager.retrieveFriend(String.valueOf(item.position)); is called I get the error below and the app crashes.

Can someone please explain why I get the error below. If you need more code or information just ask, this is the 1st time I have used Stack overflow.

Context menu item "handler":

 public boolean onContextItemSelected(MenuItem item)
{

    String editFriend = dManager.retrieveFriend(String.valueOf(info.position));
    FragmentManager manager = getFragmentManager();
    switch(item.getItemId())
    {
        case 0:
            Log.i("Friend contextual edit", "0");
            edit_Friend_Dialog edit_Friend_Dialog = new edit_Friend_Dialog();
            edit_Friend_Dialog.show(manager, "Edit Friend");

            Bundle bundle = new Bundle();
            bundle.putString("1", editFriend);
            edit_Friend_Dialog.setArguments(bundle);
            break;
        case 1:
            Log.i("Friend contextual del", "1");
            Log.i("Postion", String.valueOf(info.position));
            String id = (friendList.getItemAtPosition(info.position).toString());
            id = id.substring(0, id.indexOf(" "));
            id = id.replace(",", "");
            Log.i("id", id);
            dManager.removeRowFriend("2");
            friends = dManager.retrieveRowsFriends();
            break;


    }
    return true;
}

Database manager (dManager) retrieveFriend:

public String retrieveFriend(String id)
{
    String[] coloumns = new String[] {"id","age","gender", "name", "last_name", "address"};
    // calling elements    in an array
    cursor =  this.db.rawQuery("select * from " + DB_TABLE + " where id = " + id, null, null);
    if (cursor != null)
    {
        cursor.moveToFirst();
        String friend = "";
        friend = cursor.getString(1) + ", " + cursor.getString(2) + ", " + cursor.getString(3) + ", " + cursor.getString(4) + ", " + cursor.getString(5);
        return friend;
    }
    return null;
}

Menu1_fragment.java

    public class menu1_Fragment extends android.support.v4.app.Fragment {
    public ListView friendList;
    private String friends;
    public DatabaseManager dManager;
    public AdapterView.AdapterContextMenuInfo info;
    View rootview;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {

        rootview = inflater.inflate(R.layout.menu1_layout, container, false);
        return rootview;
    }

    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        final DatabaseManager dManager = new DatabaseManager(getContext());
        setHasOptionsMenu(true);
        friendList = (ListView) getView().findViewById(R.id.friendsList);
        registerForContextMenu(friendList);

        //retrieve all records from table and store in string
        friends = dManager.retrieveRowsFriends();
        String friendsList[] = friends.split("\\r?\\n");

        friendList.setAdapter(new ArrayAdapter<String>(getActivity().getApplicationContext(), R.layout.item, friendsList));
        friendList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long code) {
                String id = (friendList.getItemAtPosition(position).toString());
                id = id.substring(0, id.indexOf(" "));
                id = id.replace(",", "");
                dManager.removeRowFriend(id);
            }
        });

    }
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
    {
        inflater.inflate(R.menu.activity_itemdetail, menu);
        setMenuVisibility(true);

    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View veiw, ContextMenu.ContextMenuInfo menuInfo)
    {
        if(veiw.getId() == R.id.friendsList)
        {
            info = (AdapterView.AdapterContextMenuInfo) menuInfo;
            //menu.setHeaderTitle(friendList[info.position]);
            String[] menuItems = getResources().getStringArray(R.array.menu);
            for(int i = 0; i< menuItems.length; i++)
            {
                menu.add(Menu.NONE, i, i, menuItems[i]);
            }
        }
    }
    @Override
    public boolean onContextItemSelected(MenuItem item)
    {
        String editFriend = dManager.retrieveFriend(String.valueOf(info.position));
        FragmentManager manager = getFragmentManager();
        switch(item.getItemId())
        {
            case 0:
                Log.i("Friend contextual edit", "0");
                edit_Friend_Dialog edit_Friend_Dialog = new edit_Friend_Dialog();
                edit_Friend_Dialog.show(manager, "Edit Friend");

                Bundle bundle = new Bundle();
                bundle.putString("1", editFriend);
                edit_Friend_Dialog.setArguments(bundle);
                break;
            case 1:
                Log.i("Friend contextual del", "1");
                Log.i("Postion", String.valueOf(info.position));
                String id = (friendList.getItemAtPosition(info.position).toString());
                id = id.substring(0, id.indexOf(" "));
                id = id.replace(",", "");
                Log.i("id", id);
                dManager.removeRowFriend("2");
                friends = dManager.retrieveRowsFriends();
                break;


        }
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        // handle item selection
        FragmentManager manager = getFragmentManager();
        switch (item.getItemId()) {
            case R.id.add_item:
                add_Friend_Dialog add_Friend_Dialog = new add_Friend_Dialog();
                add_Friend_Dialog.show(manager, "Add Friend");
                return true;
            case R.id.remove_friend:
                remove_Friend_Dialog remove_Friend_Dialog = new remove_Friend_Dialog();
                remove_Friend_Dialog.show(manager, "Remove Friend");
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }

    }
}

The error:

 9-18 20:17:08.474  20803-20803/com.example.mm.oggy E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.example.mm.oggy, PID: 20803
    **java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.mm.oggy.DatabaseManager.retrieveFriend(java.lang.String)' on a null object reference
            at com.example.mm.oggy.menu1_Fragment.onContextItemSelected(menu1_Fragment.java:80)**
            at android.support.v4.app.Fragment.performContextItemSelected(Fragment.java:2085)
            at android.support.v4.app.FragmentManagerImpl.dispatchContextItemSelected(FragmentManager.java:2122)
            at android.support.v4.app.FragmentController.dispatchContextItemSelected(FragmentController.java:308)
            at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:334)
            at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:147)
            at android.support.v7.internal.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:100)
            at com.android.internal.policy.impl.PhoneWindow$DialogMenuCallback.onMenuItemSelected(PhoneWindow.java:4701)
            at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:761)
            at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
            at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:904)
            at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:894)
            at com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDialogHelper.java:167)
            at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:1082)
            at android.widget.AdapterView.performItemClick(AdapterView.java:305)
            at android.widget.AbsListView.performItemClick(AbsListView.java:1146)
            at android.widget.AbsListView$PerformClick.run(AbsListView.java:3053)
            at android.widget.AbsListView$3.run(AbsListView.java:3860)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5257)
            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:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Kabir
  • 852
  • 7
  • 11
MattM
  • 35
  • 1
  • 5

1 Answers1

1

dManager is null at the line specified in the exception.

user207421
  • 305,947
  • 44
  • 307
  • 483
  • How can I check that? Why is it null? I've declared it and used it earlier in "menu1_fragment.java" and any ideas on how to fix that? – MattM Sep 19 '15 at 02:11
  • 1
    Well you haven't used it earlier. You only think you have. Obviously the sequence of events is different from what you think. – user207421 Sep 19 '15 at 07:50