Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android OnActionItemClicked中出现错误_Android - Fatal编程技术网

Android OnActionItemClicked中出现错误

Android OnActionItemClicked中出现错误,android,Android,我有一个很奇怪的问题。使用SherlockActionBar时,我已成功设置上下文操作栏。当我选择一个动作模式按钮时,显示祝酒词效果很好。当我将其与对saveRing()的方法调用交换时,我得到一个强制关闭。错误必须在我的saveRing()方法中,但我无法找出它。当我从弹出式上下文菜单中调用时,saveRing方法运行良好 我的储蓄() 日志: 02-19 21:38:47.691: E/AndroidRuntime(20492): FATAL EXCEPTION: main 02-19 21

我有一个很奇怪的问题。使用SherlockActionBar时,我已成功设置上下文操作栏。当我选择一个动作模式按钮时,显示祝酒词效果很好。当我将其与对
saveRing()
的方法调用交换时,我得到一个强制关闭。错误必须在我的
saveRing()
方法中,但我无法找出它。当我从弹出式上下文菜单中调用时,
saveRing
方法运行良好

我的储蓄()

日志:

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
谢谢! 编辑:这是我在第346行的代码:
ma.saveRing(R.raw.quaq_语言,值[2])

出现错误的行取决于ListFragment中调用CAB的项。我用一个
开关
语句设置它,如下所示:

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;
viewId
是ListFragment中的位置。 问题似乎是值[]为空,但我不知道为什么。这是它被初始化的地方:

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" };

这是填充arrayadapter的字符串数组。

因此我最终找到了它。我将getSherlockActivity()传递到我的saveRing()中,并在整个方法中使用该上下文。我不知道为什么在使用
SherlockFragmentActivity
上下文时会出现问题,但看起来是这样的:

public boolean saveRing(int raw_resource, String title, Context context) {
        byte[] buffer = null;
        InputStream fIn = context.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;
        }
        context.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
        context.getContentResolver().delete(
                pURI,
                MediaStore.MediaColumns.DATA + "=\"" + k.getAbsolutePath()
                        + "\"", null);

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

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

        return true;
    }

您可以发布以下代码吗:在vartanian.android.epicmeetipro.Tab3Fragment$mActionModeCallback.onActionItemClicked(Tab3Fragment.java:346)@GauravArora编辑post在switch语句上设置一个断点并逐步执行。从您所显示的(假设您的R.raw资源设置正确)来看,值[x]或
ma
似乎为空。从上面的情况来看,似乎甚至没有调用方法saveRing。正如Simon在上面指出的,在评估saveRing()方法的属性时发生了崩溃。ma或values都是空的。@GauravArora经过之后,我相信values是空的。当我将调用从
saveRing()
更改为
Toast.makeText(getSherlockActivity(),“您在第行:“+viewId,Toast.LENGTH_LONG.show()”中选择了:“+values[0]+”时,这一点就很明显了。应用程序仍然强制关闭。现在我不明白为什么值是空的。请看我更新的帖子。谢谢你的帮助
public boolean saveRing(int raw_resource, String title, Context context) {
        byte[] buffer = null;
        InputStream fIn = context.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;
        }
        context.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
        context.getContentResolver().delete(
                pURI,
                MediaStore.MediaColumns.DATA + "=\"" + k.getAbsolutePath()
                        + "\"", null);

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

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

        return true;
    }