为什么我的代码总是给我一个空指针异常?[Eclipse中的Android]

为什么我的代码总是给我一个空指针异常?[Eclipse中的Android],android,exception,pointers,null,android-viewpager,Android,Exception,Pointers,Null,Android Viewpager,我正在使用API7开发一个Android项目,我正在尝试启动一个ViewPager,但是每当我试图从主活动创建使用ViewPager的活动时,该应用程序就会崩溃。我检查了我所有的资源,它们都在正确的目录中,但我被难住了 以下是尝试启动ViewPager的活动: public class World extends Activity{ MediaPlayer muzak; Boolean mSwitch; final Preferencer pp = (Preferen

我正在使用API7开发一个Android项目,我正在尝试启动一个ViewPager,但是每当我试图从主活动创建使用ViewPager的活动时,该应用程序就会崩溃。我检查了我所有的资源,它们都在正确的目录中,但我被难住了

以下是尝试启动ViewPager的活动:

public class World extends Activity{

    MediaPlayer muzak;
    Boolean mSwitch;

    final Preferencer pp = (Preferencer)getApplicationContext();

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        ViewPagerAdapter adapter = new ViewPagerAdapter();
        ViewPager myPager = (ViewPager) findViewById(R.id.viewpager);
        myPager.setAdapter(adapter);
        myPager.setCurrentItem(1);


        if(pp.getMuzak()){
            muzak = MediaPlayer.create(World.this, R.raw.level1);
            muzak.setLooping(true);
            muzak.start();
        }

        Button zoom = (Button) findViewById(R.id.subbutton);
        zoom.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                Intent myIntent = new Intent(view.getContext(), Subworld.class);
                startActivityForResult(myIntent, 0);
            }

        });

    }

    @Override
    protected void onPause(){
        super.onPause();
        if(pp.getMuzak()){
        muzak.release();
        }
    }
}
启动此活动的主要活动如下:

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button next = (Button) findViewById(R.id.button1);
        next.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                 Intent myIntent = new Intent(view.getContext(), World.class);
                 startActivityForResult(myIntent, 0);
            }
        });

        final ImageButton tog = (ImageButton) findViewById(R.id.button2);
        tog.setTag(2);
        tog.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {

                final int status = (Integer) view.getTag();

                if (status == 1){
                    tog.setImageResource(R.drawable.ic_lock_silent_mode_off);
                    view.setTag(2);
                }
                else if (status == 2){
                    tog.setImageResource(R.drawable.ic_lock_silent_mode);
                    view.setTag(1);
                }
            }

        });
    }
}
当我尝试粘贴相同的代码将ViewPager初始化到主活动中时,它工作得很好,但我更喜欢在单独的活动中启动ViewPager,这样当用户点击“硬后退”按钮时,它将返回到主活动。但是我想把这段代码放回主活动中是可以的,我唯一的问题是ViewPager包含的布局应该有按钮,这些按钮也可以启动新的活动。因此,如果有一个工作围绕着这一点,这将是很好的知道

我还知道我在这两个活动中调用的自定义类“preferencer”是有效的,所以我怀疑这是问题所在

我已经在网上搜索了几天了,现在我真的不知道该怎么办。很抱歉有这么多的文字和糟糕的格式,我是个新手,请原谅我的新手。对此有任何见解都将不胜感激。谢谢

编辑:

以下是logcat堆栈跟踪:

01-30 12:23:00.958: D/dalvikvm(227): GC freed 711 objects / 55944 bytes in 158ms
01-30 12:23:12.808: D/AndroidRuntime(227): Shutting down VM
01-30 12:23:12.818: W/dalvikvm(227): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
01-30 12:23:12.818: E/AndroidRuntime(227): Uncaught handler: thread main exiting due to uncaught exception
01-30 12:23:12.848: E/AndroidRuntime(227): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.Hey.namespace/com.Hey.namespace.World}: java.lang.NullPointerException
01-30 12:23:12.848: E/AndroidRuntime(227):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417)
01-30 12:23:12.848: E/AndroidRuntime(227):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
01-30 12:23:12.848: E/AndroidRuntime(227):  at android.app.ActivityThread.access$2200(ActivityThread.java:119)
01-30 12:23:12.848: E/AndroidRuntime(227):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
01-30 12:23:12.848: E/AndroidRuntime(227):  at android.os.Handler.dispatchMessage(Handler.java:99)
01-30 12:23:12.848: E/AndroidRuntime(227):  at android.os.Looper.loop(Looper.java:123)
01-30 12:23:12.848: E/AndroidRuntime(227):  at android.app.ActivityThread.main(ActivityThread.java:4363)
01-30 12:23:12.848: E/AndroidRuntime(227):  at java.lang.reflect.Method.invokeNative(Native Method)
01-30 12:23:12.848: E/AndroidRuntime(227):  at java.lang.reflect.Method.invoke(Method.java:521)
01-30 12:23:12.848: E/AndroidRuntime(227):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
01-30 12:23:12.848: E/AndroidRuntime(227):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
01-30 12:23:12.848: E/AndroidRuntime(227):  at dalvik.system.NativeStart.main(Native Method)
01-30 12:23:12.848: E/AndroidRuntime(227): Caused by: java.lang.NullPointerException
01-30 12:23:12.848: E/AndroidRuntime(227):  at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:100)
01-30 12:23:12.848: E/AndroidRuntime(227):  at com.Hey.namespace.World.<init>(World.java:16)
01-30 12:23:12.848: E/AndroidRuntime(227):  at java.lang.Class.newInstanceImpl(Native Method)
01-30 12:23:12.848: E/AndroidRuntime(227):  at java.lang.Class.newInstance(Class.java:1479)
01-30 12:23:12.848: E/AndroidRuntime(227):  at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
01-30 12:23:12.848: E/AndroidRuntime(227):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2409)
01-30 12:23:12.848: E/AndroidRuntime(227):  ... 11 more
01-30 12:23:12.888: I/dalvikvm(227): threadid=7: reacting to signal 3
01-30 12:23:12.929: I/dalvikvm(227): Wrote stack trace to '/data/anr/traces.txt'
01-30 12:23:00.958:D/dalvikvm(227):GC在158ms内释放了711个对象/55944个字节
01-30 12:23:12.808:D/AndroidRuntime(227):关闭虚拟机
01-30 12:23:12.818:W/dalvikvm(227):threadid=3:线程退出时出现未捕获异常(组=0x4001b188)
01-30 12:23:12.818:E/AndroidRuntime(227):未捕获处理程序:由于未捕获异常而退出主线程
01-30 12:23:12.848:E/AndroidRuntime(227):java.lang.RuntimeException:无法实例化活动组件信息{com.Hey.namespace/com.Hey.namespace.World}:java.lang.NullPointerException
01-30 12:23:12.848:E/AndroidRuntime(227):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2417)
01-30 12:23:12.848:E/AndroidRuntime(227):位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
01-30 12:23:12.848:E/AndroidRuntime(227):在android.app.ActivityThread.access$2200(ActivityThread.java:119)
01-30 12:23:12.848:E/AndroidRuntime(227):在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
01-30 12:23:12.848:E/AndroidRuntime(227):在android.os.Handler.dispatchMessage(Handler.java:99)上
01-30 12:23:12.848:E/AndroidRuntime(227):在android.os.Looper.loop(Looper.java:123)上
01-30 12:23:12.848:E/AndroidRuntime(227):位于android.app.ActivityThread.main(ActivityThread.java:4363)
01-30 12:23:12.848:E/AndroidRuntime(227):位于java.lang.reflect.Method.Invokenactive(本机方法)
01-30 12:23:12.848:E/AndroidRuntime(227):在java.lang.reflect.Method.invoke(Method.java:521)
01-30 12:23:12.848:E/AndroidRuntime(227):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
01-30 12:23:12.848:E/AndroidRuntime(227):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
01-30 12:23:12.848:E/AndroidRuntime(227):在dalvik.system.NativeStart.main(本机方法)
01-30 12:23:12.848:E/AndroidRuntime(227):由以下原因引起:java.lang.NullPointerException
01-30 12:23:12.848:E/AndroidRuntime(227):位于android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:100)
01-30 12:23:12.848:E/AndroidRuntime(227):位于com.Hey.namespace.World。(World.java:16)
01-30 12:23:12.848:E/AndroidRuntime(227):位于java.lang.Class.newInstanceImpl(本机方法)
01-30 12:23:12.848:E/AndroidRuntime(227):位于java.lang.Class.newInstance(Class.java:1479)
01-30 12:23:12.848:E/AndroidRuntime(227):在android.app.Instrumentation.newActivity(Instrumentation.java:1021)上
01-30 12:23:12.848:E/AndroidRuntime(227):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2409)
01-30 12:23:12.848:E/AndroidRuntime(227):。。。还有11个
01-30 12:23:12.888:I/dalvikvm(227):线程ID=7:对信号3作出反应
01-30 12:23:12.929:I/dalvikvm(227):将堆栈跟踪写入“/data/anr/traces.txt”

ViewPager作为兼容软件包第3版的一部分发布,可与Android 1.6及以上版本兼容。您是否下载了兼容包并作为android sdk组件安装

ViewPager是作为兼容包第3版的一部分发布的,可与Android 1.6及以上版本配合使用。您是否下载了兼容包并作为android sdk组件安装

您正在使用
findViewById
内部
onCreate
您的
World
活动,但是您没有在它之前调用
setContentView

您正在使用
findViewById
内部
onCreate
您的
World
活动,但是您之前没有调用
setContentView

随机跳跃,但如果您在活动之间移动时遇到问题,您的问题可能是意图。您的清单文件中是否提到您的活动

你也可以试试看,虽然你的看起来不错,但我就是这么做的

Intent myIntent = new Intent(MainActivity.this, World.class);

随机跳跃,但若你们在活动之间移动有困难,你们的问题可能是意图。您的清单文件中是否提到您的活动

你也可以试试看,虽然你的看起来不错,但我就是这么做的

Intent myIntent = new Intent(MainActivity.this, World.class);

萨瓦尔可能有正确的答案。正如他所说,在创建对它的引用之前,必须使用setContentView()对包含id为ViewPager的ViewPager的布局进行充气

这就是你得到空指针异常的地方,对吗

ViewPager myPager = (ViewPager) findViewById(R.id.viewpager);

萨瓦尔可能有正确的答案。正如他所说,您必须在之前使用setContentView()对包含id为ViewPager的ViewPager的布局进行充气