Android 应用程序已停止

Android 应用程序已停止,android,actionbarsherlock,Android,Actionbarsherlock,我正在使用ActionBarSherlocklibrary创建幻灯片菜单。我的活动中没有错误,但当我调试我的应用程序时,它在以下位置停止: getSupportActionBar().setHomeButtonEnabled(true); 我不知道为什么它停止了。你能告诉我我做错了什么吗 活动代码 package com.example.phonebook; public class SlidingMenuDrawer extends SherlockFragmentActivity{

我正在使用
ActionBarSherlock
library创建幻灯片菜单。我的
活动中没有错误,但当我调试我的应用程序时,它在以下位置停止:

getSupportActionBar().setHomeButtonEnabled(true);
我不知道为什么它停止了。你能告诉我我做错了什么吗

活动代码

package com.example.phonebook;

  public class SlidingMenuDrawer extends SherlockFragmentActivity{
    DrawerLayout mDrawerLayout;
    ListView mDrawerList;
    ActionBarDrawerToggle mDrawerToggle;
    MenuListAdapter mMenuAdapter;
    String[] title;
    String[] subtitle;
    int[] icon;
    ImageView image;
    Bitmap bitmap;
    Fragment fragment1 = new Welcome();
    //Fragment fragment2 = new Fragment2();
    //Fragment fragment3 = new Fragment3();
    private CharSequence mDrawerTitle;
    private CharSequence mTitle;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Get the view from drawer_main.xml
        setContentView(R.layout.drawer_main);
        UserModel user=(UserModel) getIntent().getSerializableExtra("User");

        // Get the Title
        mTitle = mDrawerTitle = getTitle();

        // Generate title
        title = new String[] { "Title Fragment 1", "Title Fragment 2",
            "Title Fragment 3" };

        // Generate subtitle
        subtitle = new String[] { "Subtitle Fragment 1", "Subtitle Fragment 2",
            "Subtitle Fragment 3" };

        // Generate icon
        icon = new int[] { R.drawable.action_about, R.drawable.action_settings,
            R.drawable.collections_cloud };

        // Locate DrawerLayout in drawer_main.xml
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

        // Locate ListView in drawer_main.xml
        mDrawerList = (ListView) findViewById(R.id.listview_drawer);

        // Set a custom shadow that overlays the main content when the drawer
        // opens
        mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
            GravityCompat.START);

        // Pass string arrays to MenuListAdapter
        mMenuAdapter = new MenuListAdapter(SlidingMenuDrawer.this, title, subtitle,
            icon);

        // Set the MenuListAdapter to the ListView
        mDrawerList.setAdapter(mMenuAdapter);

        // Capture listview menu item click
        mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

        // Enable ActionBar app icon to behave as action to toggle nav drawer
        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        // ActionBarDrawerToggle ties together the the proper interactions
        // between the sliding drawer and the action bar app icon
        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
            R.drawable.ic_drawer, R.string.drawer_open,
            R.string.drawer_close) {

            public void onDrawerClosed(View view) {
                // TODO Auto-generated method stub
                super.onDrawerClosed(view);
            }

            public void onDrawerOpened(View drawerView) {
                // TODO Auto-generated method stub
                // Set the title on the action when drawer open
                getSupportActionBar().setTitle(mDrawerTitle);
                super.onDrawerOpened(drawerView);
            }
        };

        mDrawerLayout.setDrawerListener(mDrawerToggle);

        if (savedInstanceState == null) {
            selectItem(0);
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == android.R.id.home) {
            if (mDrawerLayout.isDrawerOpen(mDrawerList)) {
                mDrawerLayout.closeDrawer(mDrawerList);
            } else {
                mDrawerLayout.openDrawer(mDrawerList);
            }
        }
        return super.onOptionsItemSelected(item);
    }

    // ListView click listener in the navigation drawer
    private class DrawerItemClickListener implements
            ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                long id) {
            selectItem(position);
        }
    }

    private void selectItem(int position) {
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        // Locate Position
        switch (position) {
        case 0:
            ft.replace(R.id.content_frame, fragment1);
            UserModel user= GetUser();
            break;
        case 1:
            ft.replace(R.id.content_frame, fragment1);
            break;
        case 2:
            ft.replace(R.id.content_frame, fragment1);
            break;
        }
        ft.commit();
        mDrawerList.setItemChecked(position, true);

        // Get the title followed by the position
        setTitle(title[position]);
        // Close drawer
        mDrawerLayout.closeDrawer(mDrawerList);
    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        // Sync the toggle state after onRestoreInstanceState has occurred.
        mDrawerToggle.syncState();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        // Pass any configuration change to the drawer toggles
        mDrawerToggle.onConfigurationChanged(newConfig);
    }

    @Override
    public void setTitle(CharSequence title) {
        mTitle = title;
        getSupportActionBar().setTitle(mTitle);
    }

    public UserModel GetUser()
    {
        image.setImageBitmap(bitmap);
        ImageLoader imageLoader=new ImageLoader(getApplicationContext(),getParent());
        UserModel user=new UserModel();
        user.setImageBitMap(bitmap);
        return user;
    }

    public Bitmap getBitmap(String url) {
        // I identify images by hashcode. Not a perfect solution, good for the
        // demo.

        if (url != null && !(url.equals(""))) {
            String filename = String.valueOf(url.hashCode());
            File cacheDir = null;
            File f = new File(cacheDir, filename);

            /*
             * // from SD cache Bitmap b = decodeFile(f); if (b != null) return
             * b;
             */
            // from web
            try {
                bitmap = null;
                InputStream is = new URL(url).openStream();
                OutputStream os = new FileOutputStream(f);
                Utils.CopyStream(is, os);
                os.close();
                bitmap = decodeFile(f);
                return bitmap;
            } catch (Exception ex) {
                ex.printStackTrace();
                return null;
            }
        }
        return bitmap;
    }

    //decode file
    public Bitmap decodeFile(File f) {
        try {
            // decode image size
            BitmapFactory.Options o = new BitmapFactory.Options();
            o.inJustDecodeBounds = true;
            BitmapFactory.decodeStream(new FileInputStream(f), null, o);

            // Find the correct scale value. It should be the power of 2.
            final int REQUIRED_SIZE=300;
            int width_tmp=o.outWidth, height_tmp=o.outHeight;
            int scale=1;
            while(true){
                if(width_tmp/2<REQUIRED_SIZE || height_tmp/2<REQUIRED_SIZE)
                    break;
                width_tmp/=2;
                height_tmp/=2;
                scale*=2;
            }
            // decode with inSampleSize
            BitmapFactory.Options o2 = new BitmapFactory.Options();
            o2.inSampleSize = scale;
            return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
        } catch (FileNotFoundException e) {
        }
        return null;
    }
}

确保已将Sherlock主题添加到清单文件中的应用程序标记中


选中此项您在com.example.phonebook.SlidingMenuDrawer.onCreate(SlidingMenuDrawer.java:94)有一个空值

getSupportActionBar()方法很可能返回null

在此处设置一个断点,当执行在该断点处暂停时,选择该方法并按Ctrl+Shift+I检查返回值


如果你在某些特定活动中使用动作条,而不是put
setTheme(R.style.Theme\u Sherlock)
super.onCreate(savedInstanceState)后的这一行
如果您对整个应用程序使用ActionBar,请在清单文件中添加此主题,如下所示:
android:theme=“@android:style/theme\u Sherlock”

检查SlidingMenuDrawer的onCreate()方法中的第94行。此处的某些引用为空。导致错误的post代码不要放置整个代码。@llya getSupportActionBar().setHomeButtonEnabled(true);这是我的第94行,我的应用程序stopped@DCodergetSupportActionBar().setHomeButtonEnabled(true);这一行导致错误请查看您是否为getsupportactionbar使用了正确的导入,或者您需要扩展actionbaractivity来实现该功能。此问题解决了X omar…另一个问题出现了
07-18 14:12:41.869: E/AndroidRuntime(2005): FATAL EXCEPTION: main
07-18 14:12:41.869: E/AndroidRuntime(2005): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.phonebook/com.example.phonebook.SlidingMenuDrawer}: java.lang.NullPointerException
07-18 14:12:41.869: E/AndroidRuntime(2005):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2067)
07-18 14:12:41.869: E/AndroidRuntime(2005):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2092)
07-18 14:12:41.869: E/AndroidRuntime(2005):     at android.app.ActivityThread.access$600(ActivityThread.java:133)
07-18 14:12:41.869: E/AndroidRuntime(2005):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1203)
07-18 14:12:41.869: E/AndroidRuntime(2005):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-18 14:12:41.869: E/AndroidRuntime(2005):     at android.os.Looper.loop(Looper.java:137)
07-18 14:12:41.869: E/AndroidRuntime(2005):     at android.app.ActivityThread.main(ActivityThread.java:4794)
07-18 14:12:41.869: E/AndroidRuntime(2005):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
07-18 14:12:41.869: E/AndroidRuntime(2005):     at dalvik.system.NativeStart.main(Native Method)
07-18 14:12:41.869: E/AndroidRuntime(2005): Caused by: java.lang.NullPointerException
07-18 14:12:41.869: E/AndroidRuntime(2005):     at com.example.phonebook.SlidingMenuDrawer.onCreate(SlidingMenuDrawer.java:94)
07-18 14:12:41.869: E/AndroidRuntime(2005):     at android.app.Activity.performCreate(Activity.java:5008)
07-18 14:12:41.869: E/AndroidRuntime(2005):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
07-18 14:12:41.869: E/AndroidRuntime(2005):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2031)