java - 更改其他 Activity 的 TextView 时出现错误

标签 java android

我是 Android 和 Java 的初学者,在尝试更改其他 Activity 的 TextView 时遇到错误。我已经创建了 MainActivity 和另一个(PlayerNames)。

我已将 PlayerNames 设置为启动器 Activity ,也许错误是这样的,我不知道。我发布错误和代码:

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)

主要 Activity .JAVA

好吧,在 MainActivity 上我只使用 public static TextView tv1 转换 TextView,所以我不发布它

玩家名.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!!

最佳答案

您在 Activity 完全创建之前就提前调用了 findViewById()。它不能位于字段初始化程序中。它必须位于 onCreate() 中(或之后)。而且在 setContentView() 之后,因为您首先必须设置 Activity 的内容,然后才能尝试在其中查找 View 。

关于java - 更改其他 Activity 的 TextView 时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37503566/

相关文章:

java - 如何检查html文本框中的空值?

java - 在准备好的语句中将负 java long 转换为 clickhouse Uint64

java - 我可以创建一个每次调用 get 时都会返回一个新对象的提供程序吗

启动设置 Activity 时 Android 9 后退按钮无法正常工作

java - 如何在java中获取更新的行ID

java - 带有动态 XSD 的 WSDL

java - 从 PC 发送到 PC 以及从 PC 发送到 Android 时读取的字节数组不一致

android - 具有动态加载图像的 ListView - 如何等待 ListView 加载所有图像,然后显示 ListView

android - 以编程方式更改 R.String 的值

android - 麻省理工学院 App Inventor 2 : emulator doesn't launch companion