我正在尝试在应用程序栏中添加应用程序图标的选项卡式活动,答案是:方法可能会产生'java.lang.NullPointerException'。我已阅读并尝试了所有答案,但这些答案都不适用于我。我以为我用assert getSupportActionBar()解决了它!= null; MainActivity.java中的错误消失,但随后应用程序仍然崩溃
致命的例外:主要 处理:com.gadgetcatch.test,PID:25826 java.lang.RuntimeException:无法启动活动ComponentInfo {com.gadgetcatch.test / com.gadgetcatch.test.MainActivity}:java.lang.NullPointerException:尝试调用虚方法'void android.support.v7.app.ActionBar。 setLogo(int)'在空对象引用
上我是Java的初学者,我真的很想知道为什么会这样。
这是MainActivity.java文本
package com.gadgetcatch.test;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
/**
* The {@link android.support.v4.view.PagerAdapter} that will provide
* fragments for each of the sections. We use a
* {@link FragmentPagerAdapter} derivative, which will keep every
* loaded fragment in memory. If this becomes too memory intensive, it
* may be best to switch to a
* {@link android.support.v4.app.FragmentStatePagerAdapter}.
*/
private SectionsPagerAdapter mSectionsPagerAdapter;
/**
* The {@link ViewPager} that will host the section contents.
*/
private ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
assert getSupportActionBar() != null;
android.support.v7.app.ActionBar ab = getSupportActionBar();
ab.setLogo(R.drawable.babyicon);
ab.setDisplayUseLogoEnabled(true);
ab.setDisplayShowHomeEnabled(true);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// Create the adapter that will return a fragment for each of the three
// primary sections of the activity.
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.container);
mViewPager.setAdapter(mSectionsPagerAdapter);
}
}
我在这里只添加了与我的问题有关的部分。
答案 0 :(得分:0)
根据我收集的内容,不鼓励生成代码逻辑使用断言关键字。只有在运行代码时在IDE中启用了(1)断言,才会触发此行,(2)如果在命令行中使用java -ea选项,或者(3)在您进入时可能默认使用调试模式。我猜你的IDE会识别这个并删除有关NPE的警告。我的建议是在这里使用常规空值检查,并找出为什么getSupportActionBar()返回空值。