错误**2020-03-01 17:36:58.959 6589-6589/com.studentthelper.bscit E/AndroidRuntime:致命异常:main流程:com.studentthelper.bscit,PID:6589java.lang.RuntimeException:无法启动活动ComponentInfo{com.studentthelper.bscit/com.studenthelper.bschit.MainActivity}:java.lang.NullPointerException:尝试在null对象引用上调用虚拟方法"void android.widget.TextView.setText(java.lang.CharSequence("在android.app.ActivityThread.performLaunchActivity(ActivityThreads.java:2914(在android.app.ActivityThread.handleLaunchActivity(ActivityThreads.java:3049(在android.app.ActivityThread.handleRelaunchActivityInner(ActivityThreads.java:4785(在android.app.ActivityThread.handleRelaunchActivity(ActivityThreads.java:4694(在android.app.servertransaction.ActivityRelaunchItem.execute(ActivityRelaunchItems.java:69(在android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108(在android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68(在android.app.ActivityThread$H.handleMessage(ActivityThreads.java:1809(在android.os.Handler.dispatchMessage(Handler.java:106(在android.os.Looper.loop(Looper.java:193(在android.app.ActivityThread.main(ActivityThreads.java:6692(位于java.lang.reflect.Method.ioke(本机方法(网址:com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493(网址:com.android.internal.os.ZygoteInit.main(ZygoteNit.java:858(引起原因:java.lang.NullPointerException:试图在null对象引用上调用虚拟方法"void android.widget.TextView.setText(java.lang.CharSequence("网址:com.studentthelper.bscit.MainActivity.onCreate(MainActivity.java:21(在android.app.Activity.performCreate(Activity.java:7140(在android.app.Activity.performCreate(Activity.java:7131(在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272(在android.app.ActivityThread.performLaunchActivity(ActivityThreads.java:2894(在android.app.ActivityThread.handleLaunchActivity(ActivityThreads.java:3049(在android.app.ActivityThread.handleRelaunchActivityInner(ActivityThreads.java:4785(在android.app.ActivityThread.handleRelaunchActivity(ActivityThreads.java:4694(在android.app.servertransaction.ActivityRelaunchItem.execute(ActivityRelaunchItems.java:69(在android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108(在android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68(在android.app.ActivityThread$H.handleMessage(ActivityThreads.java:1809(在android.os.Handler.dispatchMessage(Handler.java:106(在android.os.Looper.loop(Looper.java:193(在android.app.ActivityThread.main(ActivityThreads.java:6692(位于java.lang.reflect.Method.ioke(本机方法(网址:com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493(网址:com.android.internal.os.ZygoteInit.main(ZygoteNit.java:858(**
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
TextView textView=findViewById(R.id.logotext);
int unicode=0x1F4A1;
String emoji=getEmoji(unicode);
String Text="Bsc"+emoji+"T";
textView.setText(Text);
}
public String getEmoji(int uni)
{
return new String(Character.toChars(uni));
}
根据您的崩溃日志:
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) Caused by:
java.lang.NullPointerException: Attempt to invoke virtual method 'void
android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference at
com.studenthelper.bscit.MainActivity.onCreate(MainActivity.java:20)
这意味着您的text查看
TextView textView=findViewById(R.id.logotext);
在布局R.layout.activity_main中找不到,因此当您尝试textView.setText(Text);
时,它实际上是null,并发生异常。
所以,我建议
- 验证textVIew布局中的Id是否相同?以及
- 设置
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
之前
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
TextView textView=findViewById(R.id.logotext);
int unicode=0x1F4A1;
String emoji=getEmoji(unicode);
String Text="Bsc"+emoji+"T";
textView.setText(Text);
}
总结问题:您定义了两个布局,其中一个没有TextView
。从您的代码中可以明显看出,崩溃是由对null对象调用.setText()
引起的。
最好的方法总是将丢失的TextView
添加回另一个布局,这样所有布局都包含相同的ID集。这样可以避免findViewById()
引起的错误。在不需要TextView
的布局中,只需设置其android:visibility="gone"
即可将其隐藏。
或者回到您的代码,如果您知道TextView
并不总是存在,那么在调用.setText()
之前,您可以简单地检查textView
变量是否为null
。这也可以避免CCD_ 14。