Error within OnActionItemClicked
<p>I am having a very weird issue. I have successfully setup my Contextual Action Bar while using SherlockActionBar. When I select one of the action mode buttons, showing a toast message works fine. When I exchange that with my method call to <code>saveRing()</code>, I get a force close. The error has to lie within my <code>saveRing()</code> method, but I cannot figure it out. The <code>saveRing</code> method worked fine when I called it from a popup context menu.</p>

<p>My saveRing():</p>

<pre><code>public boolean saveRing(int raw_resource, String title) {
        byte[] buffer = null;
        InputStream fIn = getBaseContext().getResources()
                .openRawResource(raw_resource);
        int size = 0;

        try {
            size = fIn.available();
            buffer = new byte[size];
            fIn.read(buffer);
            fIn.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            return false;
        }

        String path = "/sdcard/media/audio/ringtones/";
        String filename = title + ".mp3";

        boolean exists = (new File(path)).exists();
        if (!exists) {
            new File(path).mkdirs();
        }
        FileOutputStream save;
        try {
            save = new FileOutputStream(path + filename);
            save.write(buffer);
            save.flush();
            save.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return false;
        }
        sendBroadcast(
                new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri
                        .parse("file://" + path + filename)));

        File k = new File(path, filename);

        ContentValues values = new ContentValues();
        values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath());
        values.put(MediaStore.MediaColumns.TITLE, title);
        values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");
        values.put(MediaStore.Audio.Media.ARTIST, "Epic Meal Time ");
        values.put(MediaStore.Audio.Media.IS_RINGTONE, true);
        values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false);
        values.put(MediaStore.Audio.Media.IS_ALARM, false);
        values.put(MediaStore.Audio.Media.IS_MUSIC, false);

        Uri pURI = MediaStore.Audio.Media.getContentUriForPath(k
                .getAbsolutePath());

        // remove entry every time so we don't get duplicate entries and have a
        // problem setting a 2nd time
        getContentResolver().delete(
                pURI,
                MediaStore.MediaColumns.DATA + "=\"" + k.getAbsolutePath()
                        + "\"", null);

        Uri nURI = getContentResolver().insert(pURI,
                values);

        RingtoneManager.setActualDefaultRingtoneUri(this,
                RingtoneManager.TYPE_RINGTONE, nURI);
        Toast.makeText(this, title + " Ringtone set",
                Toast.LENGTH_LONG).show();

        return true;
    }
</code></pre>

<p>Logcat:</p>

<pre><code>02-19 21:38:47.691: E/AndroidRuntime(20492): FATAL EXCEPTION: main
02-19 21:38:47.691: E/AndroidRuntime(20492): java.lang.NullPointerException
02-19 21:38:47.691: E/AndroidRuntime(20492):    at vartanian.android.epicmealtimepro.Tab3Fragment$mActionModeCallback.onActionItemClicked(Tab3Fragment.java:346)
02-19 21:38:47.691: E/AndroidRuntime(20492):    at com.actionbarsherlock.internal.ActionBarSherlockNative$ActionModeCallbackWrapper.onActionItemClicked(ActionBarSherlockNative.java:243)
02-19 21:38:47.691: E/AndroidRuntime(20492):    at com.android.internal.policy.impl.PhoneWindow$DecorView$ActionModeCallbackWrapper.onActionItemClicked(PhoneWindow.java:2552)
02-19 21:38:47.691: E/AndroidRuntime(20492):    at com.android.internal.app.ActionBarImpl$ActionModeImpl.onMenuItemSelected(ActionBarImpl.java:931)
02-19 21:38:47.691: E/AndroidRuntime(20492):    at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
02-19 21:38:47.691: E/AndroidRuntime(20492):    at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149)
02-19 21:38:47.691: E/AndroidRuntime(20492):    at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
02-19 21:38:47.691: E/AndroidRuntime(20492):    at com.android.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.java:514)
02-19 21:38:47.691: E/AndroidRuntime(20492):    at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:99)
02-19 21:38:47.691: E/AndroidRuntime(20492):    at android.view.View.performClick(View.java:4091)
02-19 21:38:47.691: E/AndroidRuntime(20492):    at android.view.View$PerformClick.run(View.java:17036)
02-19 21:38:47.691: E/AndroidRuntime(20492):    at android.os.Handler.handleCallback(Handler.java:615)
02-19 21:38:47.691: E/AndroidRuntime(20492):    at android.os.Handler.dispatchMessage(Handler.java:92)
02-19 21:38:47.691: E/AndroidRuntime(20492):    at android.os.Looper.loop(Looper.java:137)
02-19 21:38:47.691: E/AndroidRuntime(20492):    at android.app.ActivityThread.main(ActivityThread.java:4962)
02-19 21:38:47.691: E/AndroidRuntime(20492):    at java.lang.reflect.Method.invokeNative(Native Method)
02-19 21:38:47.691: E/AndroidRuntime(20492):    at java.lang.reflect.Method.invoke(Method.java:511)
02-19 21:38:47.691: E/AndroidRuntime(20492):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
02-19 21:38:47.691: E/AndroidRuntime(20492):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
02-19 21:38:47.691: E/AndroidRuntime(20492):    at dalvik.system.NativeStart.main(Native Method)
02-19 21:38:49.262: I/Process(20492): Sending signal. PID: 20492 SIG: 9
</code></pre>

<p>Thanks!
Edit: Here is my code at line 346: <code>ma.saveRing(R.raw.quaq_language, values[2]);</code></p>

<p>The line that has the error depends on which item in the ListFragment calls the CAB. I have it setup with a <code>switch</code> statement like this:</p>

<pre><code>case R.id.ringtone:
                switch (viewId) {
                case 0:
                    ma.saveRing(R.raw.ohhh_gurllll, values[0]);
                    break;
                case 1:
                    ma.saveRing(R.raw.pork_balls, values[1]);
                    break;
</code></pre>

<p>The <code>viewId</code> is the position within the ListFragment.
The problem seems to that values[] is null  but I don't know why. THis is where it is initialized:</p>

<pre><code>public class Tab3Fragment extends SherlockListFragment {

    String[] values = new String[] { "Ohh Gurl", "Pork Balls", "Language",
            "Really Good Idea", "Rice Paper Bacon Condom",
            "Rise and Shine", "Roll One Up Homie",
            "Save The Hate For Twitter", "Snap, Crackle, Pop",
            "Let's Get Girls", "Spanish",
            "We Make Steak Look Like Cabbage", "Wake Up McDonalds",
            "Super Moist", "Stupid, Tasty Birds", "Bacon Moment",
            "Today We Eat Smart", "We Are Gonna Die On Youtube",
            "Drunk Off Pancakes", "Ketchup", "We Eat All Our Babies",
            "Maximum Meat Experience", "Stop Hating", "What Up Bitches",
            "Whatcha Know About Bullets",
            "Whatcha Know About Terrible Food", "CANADA", "Beiber Concert",
            "Ending Riceism", "You Ain't Got What We Got", "F*cking Noob",
            "Constructed Meat Base", "Want Some Of These Nuts" };
</code></pre>

<p>This is the string array that fills the arrayadapter.</p>
