为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

MM们 2019-06-18 13:17:20
尝试在空对象引用上调用虚拟方法‘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;     }
查看完整描述

2 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

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);


查看完整回答
反对 回复 2019-06-18
?
饮歌长啸

TA贡献1951条经验 获得超3个赞

对象后,只能在java代码中访问xml文件中定义的视图。ContentView作为所需的XML文件,使用:

setContentView(R.layout.xml_file_name);

所以第一次调用上面的方法在里面onCreate方法,然后初始化View内部实例onCreate或在将在其中使用实例的方法中。


查看完整回答
反对 回复 2019-06-18
  • 2 回答
  • 0 关注
  • 1100 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信