线程以未捕获的表达式退出

Thread Exiting With Uncaught Expression

我有一个应用程序,它由简单的抽屉导航和菜单列表组成。 在其中一个菜单中,我想添加一个带有选项卡布局的页面 - 在 this 上找到可滑动视图 -- 此应用程序 运行 没有任何错误。

我决定在其中一个菜单中放置一个按钮,按下该按钮时会将用户引导至 TabLayout 的 MainActivity。

现在在我的主项目中,我有两个 MainActivity 类,一个是 MainActivity.java(这是 NavDrawer 的)和 MainActivity2.java(这是 TabLayout 的),而且我管理将所有必需的文件复制粘贴到我的主项目中,包括适配器。

我把按钮放在我的 HomeFragment.java 中,如下所示:

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_home, container, false);
        Button mButton = (Button) rootView.findViewById(R.id.button1);
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // here you set what you want to do when user clicks your button,
                Intent intent = new Intent(getActivity(), MainActivity2.class);
                startActivity(intent);
            }
        });
        return rootView;
    }
}

但不幸的是,当我点击按钮时,应用程序崩溃并显示 logcat

04-08 05:58:52.106: E/AndroidRuntime(1317): FATAL EXCEPTION: main
04-08 05:58:52.106: E/AndroidRuntime(1317): Process: my.jlm, PID: 1317
04-08 05:58:52.106: E/AndroidRuntime(1317): java.lang.RuntimeException: Unable to start activity ComponentInfo{my.jlm/my.jlm.MainActivity2}: java.lang.NullPointerException
04-08 05:58:52.106: E/AndroidRuntime(1317):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2176)
04-08 05:58:52.106: E/AndroidRuntime(1317):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226)
04-08 05:58:52.106: E/AndroidRuntime(1317):     at android.app.ActivityThread.access0(ActivityThread.java:135)
04-08 05:58:52.106: E/AndroidRuntime(1317):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
04-08 05:58:52.106: E/AndroidRuntime(1317):     at android.os.Handler.dispatchMessage(Handler.java:102)
04-08 05:58:52.106: E/AndroidRuntime(1317):     at android.os.Looper.loop(Looper.java:137)
04-08 05:58:52.106: E/AndroidRuntime(1317):     at android.app.ActivityThread.main(ActivityThread.java:4998)
04-08 05:58:52.106: E/AndroidRuntime(1317):     at java.lang.reflect.Method.invokeNative(Native Method)
04-08 05:58:52.106: E/AndroidRuntime(1317):     at java.lang.reflect.Method.invoke(Method.java:515)
04-08 05:58:52.106: E/AndroidRuntime(1317):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
04-08 05:58:52.106: E/AndroidRuntime(1317):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
04-08 05:58:52.106: E/AndroidRuntime(1317):     at dalvik.system.NativeStart.main(Native Method)
04-08 05:58:52.106: E/AndroidRuntime(1317): Caused by: java.lang.NullPointerException
04-08 05:58:52.106: E/AndroidRuntime(1317):     at my.jlm.MainActivity2.onCreate(MainActivity2.java:32)

它说错误可能是由第 32 行的 MainActivity2.java 引起的,但我不知道如何处理它

这是第 32 行

viewPager.setAdapter(mAdapter);

这是我完整的 MainActivity2

public class MainActivity2 extends FragmentActivity implements
ActionBar.TabListener {

private ViewPager viewPager;
private TabsPagerAdapter mAdapter;
private ActionBar actionBar;
// Tab titles
private String[] tabs = { "Top Rated", "Games", "Movies" };

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// Initilization
viewPager = (ViewPager) findViewById(R.id.pager);
actionBar = getActionBar();
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());

viewPager.setAdapter(mAdapter);
actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);        

// Adding Tabs
for (String tab_name : tabs) {
    actionBar.addTab(actionBar.newTab().setText(tab_name)
            .setTabListener(this));
}

/**
 * on swiping the viewpager make respective tab selected
 * */
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

    @Override
    public void onPageSelected(int position) {
        // on changing the page
        // make respected tab selected
        actionBar.setSelectedNavigationItem(position);
    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {
    }

    @Override
    public void onPageScrollStateChanged(int arg0) {
    }
});
}

@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// on tab selected
// show respected fragment view
viewPager.setCurrentItem(tab.getPosition());
}

@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
}

}

感谢您的光临。

viewPagernull。你这样初始化它:

viewPager = (ViewPager) findViewById(R.id.pager);

findViewById returns 找到视图,否则 null

public View findViewById (int id) Added in API level 1

Finds a view that was identified by the id attribute from the XML that was processed in onCreate(Bundle). Returns

The view if found or null otherwise.

Source.

你的问题是没有找到视图,可能是因为它还没有创建。