This question already has answers here:
What is a NullPointerException, and how do I fix it?
                                
                                    (12个答案)
                                
                        
                4年前关闭。
            
        

关于我要做什么的简短说明:


这是一个简单的消息传递应用程序
在我的第一个活动中,我有一个列表视图和几个按钮。


用户按下任意按钮,有关按下哪个按钮的信息存储在共享首选项中。
当用户按下任何列表项时,将触发一个意图,该意图将其带到新活动,在该活动中,putExtra()从意图中分析了按下了哪个列表项。

在第二个活动中,根据意图附带哪个值,确定newString的字符串值。


问题
屏幕旋转时,应用崩溃并显示此错误-


  尝试在空对象引用上调用虚拟方法'int java.lang.String.hashCode()'


以下是第二个活动中的代码-

String newString = "Default_Channel";

public static final String MyPREFERENCES = "MyPrefs" ;
SharedPreferences sharedpreferences;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_chat2);

    .
    .
    .

    sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);

    String restoredText = sharedpreferences.getString("CurrentUser", null);
    if (restoredText != null) {
        currentUserName = sharedpreferences.getString("CurrentUser", "unknown");//"unknown" is the default value.
        .
        .
        .
    }
    else
    {
        currentUser.setText("not signed in");
    }


    if (savedInstanceState == null)
    {
        Bundle extras = getIntent().getExtras();
        if(extras == null)
        {
            newString= "Default_Channel";
        }
        else
        {
            newString= extras.getString("LIST_ITEM_CLICKED");
        }
    }
    else
    {
        newString= (String) savedInstanceState.getSerializable("LIST_ITEM_CLICKED");
    }
     // *** GETTING ERROR HERE On this line *** //

    switch (newString)
    {
        case "User_1":
            .
            .
            .
            break;
        case "User_2":
            .
            .
            .
            break;
        case "User_3":
            .
            .
            .
            break;
        case "Default_Channel":
            .
            .
            .
            break;
    }


我在代码中提到的地方出现了NULL指针异常!它在Else语句和Switch之间的界限。

另外,我了解什么是NULL指针异常,这不是我要的。当屏幕旋转时,即活动无意重启时,我得到NULL指针。

我是android编程的新手,无法弄清楚这里出了什么问题。

编辑:这不是“什么是NULL指针异常”的重复问题。

最佳答案

我看你用这个:

newString= (String) savedInstanceState.getSerializable("LIST_ITEM_CLICKED");


那么,您是否覆盖onSaveInstanceState
如果不是,请覆盖它并保存您的当前值"LIST_ITEM_CLICKED"

我认为您的问题是因为轮换时,活动是使用savedInstanceState重新创建的,但是您没有保存您的值,因此发生了NPE。

10-05 21:11
查看更多