从不同的类调用方法时出现空指针异常
Posted
技术标签:
【中文标题】从不同的类调用方法时出现空指针异常【英文标题】:Null pointer exception when calling method from a different class 【发布时间】:2015-10-21 09:26:03 【问题描述】:当我尝试从另一个类调用方法loadUserList()
时,我收到以下错误:
Attempt to invoke virtual method android.content.res.Resources
android.content.Context.getResources() on a null object reference
这是我的 loadUserList 方法
public void loadUserList()
final ProgressDialog dia = ProgressDialog.show(this, null, getString(R.string.alert_loading));
ParseQuery<ParseObject> query = ParseQuery.getQuery("Chat_User");
query.whereEqualTo("receiver", ParseUser.getCurrentUser());
query.include("sender");
query.findInBackground(new FindCallback<ParseObject>()
@Override
public void done(List<ParseObject> li, ParseException e)
dia.dismiss();
if (li != null)
if (li.size() == 0)
Toast.makeText(com.yarnyard.UserList.this, R.string.msg_no_user_found,
Toast.LENGTH_SHORT).show();
uList = new ArrayList<ParseObject>(li);
ListView list = (ListView) findViewById(R.id.list);
list.setAdapter(new UserAdapter());
list.setOnItemClickListener(new OnItemClickListener()
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3)
loadUserList();
/*startActivity(new Intent(com.yarnyard.UserList.this, Chat.class)
.putExtra(Const.EXTRA_DATA, uList.get(pos).getUsername()));*/
);
else
Utils.showDialog(
com.yarnyard.UserList.this,
getString(R.string.err_users) + " "
+ e.getMessage());
e.printStackTrace();
);
我是这样称呼它的
public void done(ParseException e)
UserList UserList = new UserList();
UserList.loadUserList();
我的错误日志
07-30 14:14:56.219 13383-13383/com.anonimv2 E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.anonimv2, PID: 13383
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
at android.content.ContextWrapper.getResources(ContextWrapper.java:85)
at android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:74)
at android.content.Context.getString(Context.java:376)
at com.yarnyard.UserList.loadUserList(UserList.java:96)
at com.yarnyard.custom.CustomActivity.onOptionsItemSelected(CustomActivity.java:116)
at android.app.Activity.onMenuItemSelected(Activity.java:2882)
at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:353)
at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:1131)
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 android.widget.ActionMenuView.invokeItem(ActionMenuView.java:587)
at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:141)
at android.view.View.performClick(View.java:4832)
at android.view.View$PerformClick.run(View.java:19839)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:211)
at android.app.ActivityThread.main(ActivityThread.java:5321)
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:1016)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811)
任何建议将不胜感激。
【问题讨论】:
您的代码与您发布的 logcat 不匹配。所以先把它做好。 【参考方案1】:在对象上调用普通的非静态方法,而不是在类上。这是您在使用面向对象语言之前真正需要学习的一个要点。只有这样,您才能在实践中看到如何通过传递引用来连接对象。
您在done
方法中构造的UserList
对象不是您要调用的对象,它只是一个空的、未初始化的shell。
【讨论】:
这很令人困惑,但看起来它实际上是在一个对象实例上调用的,但实例引用与类的名称相同。 OPs 代码在很多层面上都是错误的...... @DanielNugent 是的,我注意到它是在实例上调用的 - 我试图说它是在调用之前创建的实例,而不是 OP 想要调用的实例(也就是说,从堆栈跟踪,当前活动)。【参考方案2】:据我了解,您是从 Context 扩展 UserList 的,对吗? 然后请记住,在 Android 中,永远不要自己初始化 Context 对象,这是框架的工作。。 在你的情况下,因为你创建了一个没有附加到任何 baseContext 的上下文实例,所以当访问公共资源时,你得到了一个 NPE。 我猜你正试图转移到一个新的片段或活动?然后阅读这些链接start activityswitch fragment
【讨论】:
以上是关于从不同的类调用方法时出现空指针异常的主要内容,如果未能解决你的问题,请参考以下文章
Android - 调用自定义 View 方法时出现空指针异常
在使用ViewPager时尝试从其父活动修改片段时出现空指针异常