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)