如何解决Java.lang.NullPointerException:尝试调用虚拟方法?
我正在尝试向上下文菜单中添加操作,即编辑和删除。这些操作将编辑或删除数据库表中的条目。 当按下edit(编辑)或delete(删除)选项时,应访问表“db_table”以检索与id主键相对应的“friend(朋友)”行。id由“info.position”确定,dManager.retrieveFriend()用于检索行 当…dManager.retrieveFriend(String.valueOf(item.position));名为“我得到下面的错误”,应用程序崩溃 有人能解释一下我为什么会出现下面的错误吗。如果您需要更多的代码或信息,请询问,这是我第一次使用堆栈溢出 上下文菜单项“处理程序”:如何解决Java.lang.NullPointerException:尝试调用虚拟方法?,java,android,nullpointerexception,Java,Android,Nullpointerexception,我正在尝试向上下文菜单中添加操作,即编辑和删除。这些操作将编辑或删除数据库表中的条目。 当按下edit(编辑)或delete(删除)选项时,应访问表“db_table”以检索与id主键相对应的“friend(朋友)”行。id由“info.position”确定,dManager.retrieveFriend()用于检索行 当…dManager.retrieveFriend(String.valueOf(item.position));名为“我得到下面的错误”,应用程序崩溃 有人能解释一下我为什么
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;
}
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;
}
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)
数据库管理器(dManager)检索朋友:
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;
}
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;
}
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)
Menu1\u 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);
}
}
}
dManager
在异常中指定的行处为空。如何检查?为什么它是空的?我在前面的“menu1_fragment.java”中声明并使用了它,还有关于如何修复它的想法吗?好吧,您以前没有使用过它。你只觉得你有。显然,事件的顺序与你所想的不同。