尝试在空对象引用上调用虚拟方法‘android.view.Window$回调

尝试在空对象引用上调用虚拟方法‘android.view.Window$回调-android.view.Window.getCallback()’

当我SplashActivity打开LoginActivity我的应用程序崩溃了。

以下是我的SplashActivity.java:

package com.example.android.appName;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;
import java.util.Timer;import java.util.TimerTask;public class SplashActivity extends AppCompatActivity {
    @Override
    
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);

        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            public void run() {
                Intent intent = new Intent(SplashActivity.this, LoginActivity.class);
                startActivity(intent);
                finish();
            }
        }, 1500);
    }}

我的LoginActivity.java:

package com.example.android.appName;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.view.View;
import android.widget.EditText;import android.widget.ProgressBar;import android.widget.TextView;
public class LoginActivity extends AppCompatActivity {
    private EditText usernameField = (EditText)findViewById(R.id.username),
                     passwordField = (EditText)findViewById(R.id.password);
    private TextView error = (TextView)findViewById(R.id.error);
    private ProgressBar progress = (ProgressBar)findViewById(R.id.progress);

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.login_menu, menu);
        return true;
    }
MM们
浏览 1101回答 2
2回答

莫回无

阿Activity未完全初始化并准备在之后查找视图。setContentView(...)被叫进来onCreate().只声明如下所示的字段:private EditText usernameField, passwordField;private TextView error;private ProgressBar progress;中的值onCreate:@Overrideprotected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_login);     usernameField = (EditText)findViewById(R.id.username);     passwordField = (EditText)findViewById(R.id.password);     error = (TextView)findViewById(R.id.error);     progress = (ProgressBar)findViewById(R.id.progress);}可能不是问题的一部分,但作为一个额外的建议,Timer运行TimerTask在后台线程上,在这种情况下应该避免这种情况。替换Timer带着Handler而是在UI线程上运行它。new Handler().postDelayed(new Runnable() {         @Override         public void run() {             Intent intent = new Intent(SplashActivity.this, LoginActivity.class);             startActivity(intent);             finish();         }}, 1500);

饮歌长啸

对象后,只能在java代码中访问xml文件中定义的视图。ContentView作为所需的XML文件,使用:setContentView(R.layout.xml_file_name);所以第一次调用上面的方法在里面onCreate方法,然后初始化View内部实例onCreate或在将在其中使用实例的方法中。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java
Android