java– 尝试在空对象引用上调用虚方法’android.view.Window $Callback android.view.Window.getCallback()’

java– 尝试在空对象引用上调用虚方法’android.view.Window $Callback android.view.Window.getCallback()’,第1张

概述当我的SplashActivity打开LoginActivity时,我的应用程序崩溃了.以下是我的SplashActivity.java:packagecom.example.android.appName;importandroid.content.Intent;importandroid.os.Bundle;importandroid.support.v7.app.AppCompatActivity;importjava.util.Timer;

当我的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;    }      @OverrIDe    public boolean onKeyDown(int keyCode, KeyEvent event) {        if (androID.os.Build.VERSION.SDK_INT > 5                && keyCode == KeyEvent.KEYCODE_BACK                && event.getRepeatCount() == 0) {            onBackpressed();            return true;        }        return super.onKeyDown(keyCode, event);    }    public voID exit(MenuItem item) {        finish();    }    public voID signIn(VIEw vIEw) {        Intent intent = new Intent(this, MainActivity.class);        startActivity(intent);        finish();    }}

AndroIDManifest.xml的一部分:

<activity androID:name=".SplashActivity"    androID:theme="@style/NoActionbar">    <intent-filter>        <action androID:name="androID.intent.action.MAIN" />        <category androID:name="androID.intent.category.LAUNCHER" />    </intent-filter></activity><activity    androID:name=".LoginActivity"    androID:label="@string/Title_activity_login" />

logcat中的错误:

04-16 23:24:16.124 4015-4015/com.example.androID.appname E/AndroIDRuntime: FATAL EXCEPTION: main Process: com.example.androID.appname, PID: 4015 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.androID.appname/com.example.androID.appname.LoginActivity}: 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:2993)     at androID.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3248)     at androID.app.ActivityThread.access00(ActivityThread.java:197)     at androID.app.ActivityThread$H.handleMessage(ActivityThread.java:1681)     at androID.os.Handler.dispatchMessage(Handler.java:102)     at androID.os.Looper.loop(Looper.java:145)     at androID.app.ActivityThread.main(ActivityThread.java:6872)     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:1404)     at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:1199)  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:145)     at androID.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:28)     at androID.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:42)     at androID.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:186)     at androID.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:168)     at androID.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:508)     at androID.support.v7.app.AppCompatActivity.findVIEwByID(AppCompatActivity.java:180)     at com.example.androID.appname.LoginActivity.<init>(LoginActivity.java:20)     at java.lang.reflect.Constructor.newInstance(Native Method)     at java.lang.class.newInstance(Class.java:1690)     at androID.app.Instrumentation.newActivity(Instrumentation.java:1080)     at androID.app.ActivityThread.performlaunchActivity(ActivityThread.java:2983)     at androID.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3248)      at androID.app.ActivityThread.access00(ActivityThread.java:197)      at androID.app.ActivityThread$H.handleMessage(ActivityThread.java:1681)      at androID.os.Handler.dispatchMessage(Handler.java:102)      at androID.os.Looper.loop(Looper.java:145)      at androID.app.ActivityThread.main(ActivityThread.java:6872)      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:1404)      at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

解决方法:

在onCreate()中调用setContentVIEw(…)之后,Activity才会完全初始化并准备好查找视图.

仅声明如下字段:

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,而不是在UI线程上运行它.

new Handler().postDelayed(new Runnable() {        @OverrIDe        public voID run() {            Intent intent = new Intent(SplashActivity.this, LoginActivity.class);            startActivity(intent);            finish();        }}, 1500);
总结

以上是内存溢出为你收集整理的java – 尝试在空对象引用上调用虚方法’android.view.Window $Callback android.view.Window.getCallback()’全部内容,希望文章能够帮你解决java – 尝试在空对象引用上调用虚方法’android.view.Window $Callback android.view.Window.getCallback()’所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1104541.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存