无法实例化活动ComponentInfo ... java.lang.NullPointerException

时间:2014-02-25 20:16:32

标签: java android eclipse android-intent nullpointerexception

好的,所以当按下 startGame 按钮时出现问题。按下按钮时应用程序崩溃。活动在清单中实例化,所以我不确定错误在哪里。意图的代码是另一个的副本(有效),所以我不知道哪里出错了。

错误日志:

  

02-25 14:46:51.064:E / AndroidRuntime(1261):致命异乎寻常:主要   02-25 14:46:51.064:E / AndroidRuntime(1261):进程:com.example.hegemony,PID:1261   02-25 14:46:51.064:E / AndroidRuntime(1261):java.lang.RuntimeException:无法实例化活动ComponentInfo {com.example.hegemony / com.example.hegemony.PlayerTurn}:java.lang.NullPointerException

清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.hegemony"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="11"
    android:targetSdkVersion="19" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >



    <activity
        android:name="com.example.hegemony.SplashScreen"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity 
        android:name="com.example.hegemony.StartScreen" >
        <intent-filter>
            <action android:name="com.example.hegemony.STARTSCREEN" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>


    <activity 
        android:name="com.example.hegemony.SetupHomeScreen" >
        <intent-filter>
            <action android:name="com.example.hegemony.SETUPHOMESCREEN" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

    <activity
        android:name="com.example.hegemony.SetupPlayer"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="com.example.hegemony.SETUPPLAYER" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

    <activity
        android:name="com.example.hegemony.PlayerTurn"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="com.example.hegemony.PLAYERTURN" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>

</application>

发送活动的Java代码:

public class SetupHomeScreen extends Activity{

private ArrayList<Player> p = GameMaster.players;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_setup_home_screen);
    getActionBar().hide();
    updatePlayers();
    Button gotoInput = (Button) findViewById(R.id.btnSetupPlayer);
    gotoInput.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent toInput = new Intent("com.example.hegemony.SETUPPLAYER");
            startActivity(toInput);
        }
    });

    Button startGame = (Button) findViewById(R.id.btnStartGame);
    startGame.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent toStart = new Intent("com.example.hegemony.PLAYERTURN");
            startActivity(toStart);
        }
    });

}


 public void updatePlayers(){
        TextView playerList = (TextView) findViewById(R.id.playerList);
        String msg = "";
        for(int i=0;i < p.size();i++)
            msg = msg + "\n - "+p.get(i).getName();
        playerList.setText(msg);
        if(p.size() >=2){
            Button enable = (Button) findViewById(R.id.btnStartGame);
            enable.setEnabled(true);
        }
    }
}

接收活动的Java代码:

public class PlayerTurn extends Activity {

final ActionBar actionBar = getActionBar();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_player_turn);
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    ActionBar.TabListener tabListener = new ActionBar.TabListener() {

        @Override
        public void onTabReselected(Tab tab, FragmentTransaction ft) {

        }

        @Override
        public void onTabSelected(Tab tab, FragmentTransaction ft) {

        }

        @Override
        public void onTabUnselected(Tab tab, FragmentTransaction ft) {

        }

    }; 
}

}

2 个答案:

答案 0 :(得分:0)

Button startGame = (Button) findViewById(R.id.btnStartGame);
    startGame.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent toStart = new Intent(SendingActivity.this, NewActivity.class);
            startActivity(toStart);
        }
    });

我认为这是你应该如何开始一个意图。也许它缺少一个上下文或“activityname”不是正确的方法。我尝试以你正在尝试的方式开始一个活动,它也给了我一个错误,不是同一个错误,但是它没有用。 如果我想提供的解决方案不起作用,我很抱歉。这是我第一次尝试帮助某人。我希望它有效。

答案 1 :(得分:0)

根据logcat错误消息,您的活动类无法实例化。实例化涉及任何类成员变量的分配和赋值。在PlayerTurn的情况下,唯一的一个就是:

final ActionBar actionBar = getActionBar();

对getActionBar()的调用会抛出NullPointerException,因为尚未构建活动的窗口 - 在onCreate()中调用setContentView()之后应调用getActionBar()。您只需将该行代码移动到onCreate()即可解决此问题。

如果您仍希望将其保留为类成员变量,请声明它但不指定它:

ActionBar actionBar;

...然后在onCreate()中执行赋值:

actionBar = getActionBar();