从另一个类调用方法时出现空指针异常

时间:2015-07-30 06:35:08

标签: java android nullpointerexception

当我尝试从另一个类调用方法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)

非常感谢任何建议。

2 个答案:

答案 0 :(得分:1)

正常的非静态方法在对象上调用,而不是在类上调用。在使用面向对象语言之前,您确实需要学习这一点。只有这样,您才能在实践中看到如何通过传递引用来连接对象。

您在UserList方法中构造的done对象不是您要调用的对象,它只是一个空的,未初始化的shell。

答案 1 :(得分:1)

据我所知,你从Context中扩展了UserList,对吧? 然后请记住,在Android 永远不会自己初始化Context对象,这是框架的工作。
在您的情况下,因为您创建了一个没有附加到任何baseContext的上下文实例,所以当访问公共资源时,您获得了一个NPE。
我想你正试图转向一个新的碎片或行动?然后阅读这些链接start activity switch fragment