2016-05-28 42 views
0

我是Android和Java的初学者,尝试更改其他活动的TextView时出错。我创建了MainActivity,另一个(PlayerNames)。更改其他活动的TextView时发生错误

我已经将PlayerNames设置为启动器活动,也许错误是,我不知道。我张贴的错误,代码:

FATAL EXCEPTION: main 

Process: com.example.android.mapamundi, PID: 1423 
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.android.mapamundi/com.example.android.mapamundi.PlayerNames}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2236) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
at android.app.ActivityThread.access$800(ActivityThread.java:151) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5254) 
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:903) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window$Callback android.view.Window.getCallback()' on a null object reference 
at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:68) 
at android.support.v7.app.AppCompatDelegateImplV7.<init>(AppCompatDelegateImplV7.java:146) 
at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:28) 
at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:41) 
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:190) 
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:172) 
at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:512) 
at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:184) 
at com.example.android.mapamundi.PlayerNames.<init>(PlayerNames.java:12) 
at java.lang.reflect.Constructor.newInstance(Native Method) 
at java.lang.Class.newInstance(Class.java:1606) 
at android.app.Instrumentation.newActivity(Instrumentation.java:1066) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2226) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
at android.app.ActivityThread.access$800(ActivityThread.java:151) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5254) 
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:903) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

MAINACTIVITY.JAVA

好了,就MainActivity我只投了TextViews与public static TextView tv1,所以我没有将它张贴

PLAYERNAMES.JAVA

public class PlayerNames extends AppCompatActivity implements View.OnClickListener { 

Button accept = (Button) findViewById(R.id.changeNames); 



EditText playerInput1 = (EditText) findViewById(R.id.PlayerNameInput1); 
EditText playerInput2 = (EditText) findViewById(R.id.PlayerNameInput2); 
EditText playerInput3 = (EditText) findViewById(R.id.PlayerNameInput3); 
EditText playerInput4 = (EditText) findViewById(R.id.PlayerNameInput4); 


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



    accept.setOnClickListener(this); 
} 

@Override 
public void onClick(View view) { 
    switch (view.getId()){ 
     case (R.id.changeNames): 

      MainActivity.playerName1.setText(playerInput1.toString()); 
      MainActivity.playerName2.setText(playerInput2.toString()); 
      MainActivity.playerName3.setText(playerInput3.toString()); 
      MainActivity.playerName4.setText(playerInput4.toString()); 

      Intent intent = new Intent(PlayerNames.this, MainActivity.class); 

      startActivity(intent); 
    } 
} 

}

我的AndroidManifest.xml后,以防万一我有一个错误或导致错误的东西

<activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme.NoActionBar"> 
     <intent-filter> 
      <action android:name="com.example.android.mapamundi.MainActivity" /> 

      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".PlayerNames"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

有人可以告诉我我做错了什么吗? TKS!

+0

除了实际的答案,你的字段不是静态的,所以'MainActivity.playerName1'可以用'playerName1'或'MainActivity.this.playerName1'代替 –

+0

@ cricket_007如果我把Mainactivity.this.playerName1给我错误'这个' –

+0

它不应该...这就是你如何引用一个成员变量 –

回答

2

在您的活动完全创建之前,您打电话给findViewById()。它不能在现场初始化器中。它必须在(或之后)onCreate()。而且在setContentView()之后,因为您首先必须设置活动的内容,才能尝试在其中查找视图。