Java void android.widget.ImageView.setEnabled(布尔值)和#x27;关于空对象引用
我正在使用一个简单的java库文件来撤销和重做文本,如教程和示例android应用程序所示,但对于我来说,当我运行应用程序时,它会显示以下错误Java void android.widget.ImageView.setEnabled(布尔值)和#x27;关于空对象引用,java,android,Java,Android,我正在使用一个简单的java库文件来撤销和重做文本,如教程和示例android应用程序所示,但对于我来说,当我运行应用程序时,它会显示以下错误 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setEnabled(boolean)' on a null object reference at com.apps.primaln
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setEnabled(boolean)' on a null object reference
at com.apps.primalnotes.Fragments.EditorFragment.textAction(EditorFragment.java:1023)
at com.apps.primalnotes.Fragments.EditorFragment.onCreateView(EditorFragment.java:84)
以下是我在GitHub上遵循的库和方法
我正在做的就是
EditorFragment extends Pantalla implements TextUndoRedo.TextChangeInfo, View.OnClickListener{
private TextUndoRedo TUR;
private ImageView undo, redo;
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.editor, container, false);
getActivity().setTitle("Editor");
setHasOptionsMenu(true);
imm =(InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
base = new DataBase(context, null);
text = (EditText) view.findViewById(R.id.texto);
undo = (ImageView)view.findViewById(R.id.undo);
redo = (ImageView)view.findViewById(R.id.redo);
TUR = new TextUndoRedo(text, this);
textAction(); "Showing error here"
undo.setOnClickListener(this);
redo.setOnClickListener(this);
}
@Override
public void textAction() {
undo.setEnabled(TUR.canUndo()); "Showing error here"
redo.setEnabled(TUR.canRedo());
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.undo:
TUR.exeUndo();
break;
case R.id.redo:
TUR.exeRedo();
break;
您的代码没有“setContentView(R.layout.{layout的文件名})”
你能检查一下吗?应该在使用findViewById方法之前执行此操作。这里是来自Github源代码的代码
btn_undo = (Button) findViewById(R.id.btn_undo);
btn_undo.setOnClickListener(this);
btn_redo = (Button) findViewById(R.id.btn_redo);
btn_redo.setOnClickListener(this);
下面是代码中的代码:
text = (EditText) view.findViewById(R.id.texto);
undo = (ImageView)view.findViewById(R.id.undo);
redo = (ImageView)view.findViewById(R.id.redo);
TUR = new TextUndoRedo(text, this);
示例使用
按钮
进行撤消/重做,您使用图像视图
。检查xml中的ImageView ID是什么。与此处的其他内容相同,您的撤消/重做ImageView
为空。检查您的XML。用于撤消和重做的ImageView的id应如下所示:
android:id="@+id/undo
或
你初始化了吗?没有。在GitHub上的给定示例中,它也没有初始化。你的ImageView代码在哪里?你的代码的可能副本不完整。我有,但为了简单起见,我在这里编辑我的代码。如果你能看一下教程链接,它很简单,我也在做同样的事情。但是在我的案例中,通过堆栈跟踪得到这个错误,“undo”变量为null。因此,我建议检查布局文件是否具有带“@+id/undo”的ImageView。它与id无关。ID很好,它与ImageView或按钮无关。我也尝试了button小部件,但给出了相同的错误。另一种可能性是,您确定您膨胀了正确的xml布局吗。来自widget的Null,因为widget未分配或不在您的右侧xml.xml布局和id上。textAction()刚刚出现错误;调用和undo.setEnabled(TUR.canUndo());“此处显示错误”redo.setEnabled(TUR.canRedo());是的,我知道,但从逻辑上讲,如果A不在那里,你可以将
某物设置为A。如果您说您有权为ImageView
分配权限,我最后的建议是使用NullPointerException
android:id="@+id/redo"