Android 在开关情况下获取Toast的空对象引用错误

Android 在开关情况下获取Toast的空对象引用错误,android,Android,无论我做什么,当我试图在开关盒中调用toast时,总是会出现类似null对象引用的错误。switch方法所在的类扩展了FragmentActivity 我试图扩展Fragment/v4。和没有成功的活动。 我还尝试传递getContext、getBaseContext、getAppliction();,getApplication().getBaseContext etc作为toast的上下文,但未成功 如果我在MainActivity中创建一个公共Toast对象,并像这样使用它MainActi

无论我做什么,当我试图在开关盒中调用toast时,总是会出现类似
null对象引用
的错误。switch方法所在的类扩展了FragmentActivity

我试图扩展Fragment/v4。和没有成功的活动。 我还尝试传递
getContext、getBaseContext、getAppliction();,getApplication().getBaseContext etc
作为toast的上下文,但未成功

如果我在MainActivity中创建一个公共Toast对象,并像这样使用它
MainActivity.copyToast.show()它可以工作,但是这个解决方案看起来不太好

我想把它放在一行中,如下所示:
Toast.makeText(this.getApplicationContext(),“复制到剪贴板”,Toast.LENGTH\u SHORT.show()

全班:

public class CustomTextSelectionMenu extends Fragment implements android.view.ActionMode.Callback {



@Override
public boolean onCreateActionMode(android.view.ActionMode mode, Menu menu) {
    MenuInflater inflater = mode.getMenuInflater();
    inflater.inflate(R.menu.menu_main, menu);
    menu.removeItem(android.R.id.selectAll);
    menu.removeItem(android.R.id.paste);



    return true;
}

@Override
public boolean onPrepareActionMode(android.view.ActionMode mode, Menu menu) {
    return false;
}

@Override
public boolean onActionItemClicked(android.view.ActionMode mode, MenuItem item) {

    int selectionStart = editText.getSelectionStart();
    int selectionEnd = editText.getSelectionEnd();

    if (selectionEnd > selectionStart) {
        Spannable str = editText.getText();
        boolean exists = false;
        StyleSpan[] styleSpans;

        switch (item.getItemId()) {


            //--------------------COPY----------------------------
            case android.R.id.copy:
                CharSequence charSequence =   editText.getText().subSequence(selectionStart, selectionEnd);
                ClipData clip = ClipData.newPlainText("simple text", charSequence);
                MainActivity.clipboard.setPrimaryClip(clip);



                Toast.makeText(getActivity().getApplicationContext(),  "Copied to clipboard.", Toast.LENGTH_SHORT).show();
                //MainActivity.copyToast.show();
                break;

            //--------------------BOLD----------------------------
            case R.id.bold:

                styleSpans = str.getSpans(selectionStart, selectionEnd, StyleSpan.class);

                // If the selected text-part already has BOLD style on it, then
                // we need to disable it
                for (int i = 0; i < styleSpans.length; i++) {
                    if (styleSpans[i].getStyle() == android.graphics.Typeface.BOLD) {
                        str.removeSpan(styleSpans[i]);
                        exists = true;
                    }
                }

                // Else we set BOLD style on it
                if (!exists) {
                    str.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), selectionStart, selectionEnd,
                            Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
                }

                editText.setSelection(selectionStart, selectionEnd);



                break;     

        }
    }
    return true;

}


@Override
public void onDestroyActionMode(android.view.ActionMode mode) {


}

}
第182行指向此:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:110)
at org.m.muddzboy.QuoteCreator.CustomTextSelectionMenu.onActionItemClicked(CustomTextSelectionMenu.java:182)
at android.widget.Editor$SelectionActionModeCallback.onActionItemClicked(Editor.java:3228)

Toast.makeText(this.getApplicationContext(),“复制到剪贴板”,Toast.LENGTH\u SHORT).show()

如果您使用的是
Fragment
您需要尝试
Toast
如下代码:

Toast.makeText(getActivity(), "Copied to clipboard.", Toast.LENGTH_SHORT).show();

我在我的片段应用程序中使用Toast,如下所示,它完全可以工作

Context context;
查找根视图之后

context = getActivity();

Toast.makeText(context, "Copied to clipboard.", Toast.LENGTH_SHORT).show();

如果使用片段,请使用以下代码

Toast.makeText(getActivity(), "Copied to clipboard.", Toast.LENGTH_SHORT).show();
Toast.makeText(this, "Copied to clipboard.", Toast.LENGTH_SHORT).show();
如果是活动,请使用以下代码

Toast.makeText(getActivity(), "Copied to clipboard.", Toast.LENGTH_SHORT).show();
Toast.makeText(this, "Copied to clipboard.", Toast.LENGTH_SHORT).show();

Toast方法会引起很多问题,我们必须注意它,这就是我回答这个问题的原因

第一个名为null的上下文将使你的应用程序崩溃,就像你的情况一样

如何修复:在create方法上从上下文保留引用

private Context mContext;

 @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
     mContext = getActivity()
}
第二,当展示土司时,可能会被破坏的碎片如何确保它不会崩溃

public void showToast(String msg) {
        if (YOR_FRAGMENT.this.isVisible() && msg != null & mContext != null)
            Toast.makeText(mContext, msg, Toast.LENGTH_LONG).show();
    }
这会让你远离烤面包机


希望此帮助

是片段中的代码吗?使用此.getApplicationContext()代替此。。。。。。尝试将getActivity()作为contextToast.makeText(getActivity(),“复制到剪贴板”,Toast.LENGTH_SHORT.show();。。。。你究竟为什么要将编辑文本存储在静态变量中?@CapDroid此代码位于自定义SelectionActionModeCallback类中。getActivity不工作它不工作,我得到以下错误:
尝试在空对象引用上调用虚拟方法“android.content.res.Resources android.content.Context.getResources()”
@pRaNaY的答案是正确的。您的评论和您观察到的错误与原始问题无关,因为您在使用
getResources()
方法时遇到
NullReferenceException
,并且(演示)代码中没有
getResources()
。如果您有其他问题,请发布新问题。请阅读以下内容:在询问与
NullReferenceException
@Nikola相关的其他问题之前,我没有否决他的答案,我只是写下了他的解决方案的结果,这就是我在评论中发布的错误。是的,我的评论和错误与原始问题有关?人们向我提供了他们的解决方案,我也在提供反馈them@Muddz但现在你走上了不同的道路,首先要弄清楚你的主要问题是什么<代码>“android.content.Context android.content.Context.getApplicationContext()”在空对象引用上
此引用或“java.lang.NullPointerException:尝试调用虚拟方法”android.content.res.Resources android.content.Context.getResources()'在一个空对象引用上'this one?@ChiragSavsani现在它的
android.content.res.Resources android.content.Context.getResources()'在一个空对象引用上
当我尝试调用时:
Toast.makeText(getActivity(),“复制到剪贴板”,Toast.LENGTH_SHORT)。show()无效:
尝试在空对象引用上调用虚拟方法“android.content.res.Resources android.content.Context.getResources()”
在我的情况下没有帮助尝试清理项目并在片段中重新运行帮助我