
当我的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()’所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)