从不同的类调用方法时出现空指针异常

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时尝试从其父活动修改片段时出现空指针异常

对数据帧火花执行操作时出现空指针异常

有时在调用时与对手创建 QBRTCSession 时出现空指针异常

从firebase检索时出现空指针异常[重复]

尝试从 Kotlin 中的另一个活动访问 EditText 时出现空指针异常