【问题标题】:ListView search NullPointerException - AndroidListView 搜索 NullPointerException - Android
【发布时间】:2016-07-09 12:49:33
【问题描述】:

我做了一个应用程序,它是一种翻译单词的字典 该片段包含两个列表视图和一个类似于搜索框的 editText 我想进行搜索,但总是显示 NullPointer Exception

列表视图代码:

public void InitEng(){
    English = new String[]
            {
                    "word1", "word2", "word3", "word4", "word5",        
            };
    English_list = new ArrayList<>(Arrays.asList(English));
    lv.setTextFilterEnabled(true);
    lv.setAdapter(new ArrayAdapter<String>(getActivity().getApplicationContext(), R.layout.list_item, R.id.engword, English_list));
}

public void InitGer(){
    German = new String[]
            {
                   "word1", "word2", "word3", "word4", "word5", 
            };
    German_list = new ArrayList<>(Arrays.asList(German));
    lvn.setTextFilterEnabled(true);
    lvn.setAdapter(new ArrayAdapter<String>(getActivity().getApplicationContext(), R.layout.list_item, R.id.gerword, German_list));
}

现在是 OnTextChanged(搜索应该发生的地方)

inputSearch.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
                /** When user changed the Text */
                cs = inputSearch.getText().toString();
                if(SelectEng.isChecked()){
                    try{
                        if("".equals(cs.toString())){
                            InitEng();
                            InitGer();
                        }
                        else{

                            for(String Items: English){
                                if(Items.contains(cs)){
                                    English_list.remove(Items != cs);
                                    lvn.setVisibility(View.INVISIBLE);
                                    Toast.makeText(getActivity(),
                                            "found-en",
                                            Toast.LENGTH_LONG).show();
                                }
                            }
                            adapterE.notifyDataSetChanged();
                            adapterN.notifyDataSetChanged();
                        }
                    }
                    catch (Exception e){
                        Toast.makeText(getActivity(), "Error : "+e,
                                Toast.LENGTH_LONG).show();
                    }
                }
                else if(SelectGer.isChecked()){
                    try{
                        if("".equals(cs.toString())){
                            InitEng();
                            InitGer();
                            lv.setVisibility(View.VISIBLE);
                            lvn.setVisibility(View.VISIBLE);
                        }
                        else{

                            for(String Items: German){
                                if(Items.contains(cs)){
                                    German_list.remove(Items != cs);
                                    lv.setVisibility(View.INVISIBLE);
                                    Toast.makeText(getActivity(),
                                            "found-de",
                                            Toast.LENGTH_LONG).show();     
                                }
                            }
                            adapterN.notifyDataSetChanged();
                            adapterE.notifyDataSetChanged();
                        }
                    }
                    catch (Exception e){
                        Toast.makeText(getActivity(),
                                "Error : "+e,
                                Toast.LENGTH_LONG).show();
                    }
                }
            }

最终结果应该是: 根据用户输入过滤列表 过滤器应适用于两个列表并显示彼此面对的单词 我有两个列表视图,所以我使用了 2 个适配器 主要问题:NullPointerException 不要忘记我正在处理片段

【问题讨论】:

  • Nullpointer 到底发生在哪里?在哪个物体上???
  • 在“Try()...catch()”部分
  • 我只记得日志说 NullPointer 异常发生在“PerformSearchEng()”函数中
  • 你不需要记住那么难......再次运行代码并将logcat输出复制到这里......:)
  • 我做了一些重大改变,请花时间评估我的工作,我还是新手处理列表和适配器

标签: java android listview search nullpointerexception


【解决方案1】:

在你的performAction()你设置

cs = null;

并调用

cs.toString().equals(..)

这当然会产生 NullPointerException,因为您将 cs 设置为 null。你捕获了这个异常,但我想你的InitGer() 永远不会被调用,并且你的变量English 也是空的,并导致performSearchEng() 中未捕获的NullPointerException。 所以你必须考虑这一行:

CharSequence cs = null;

(顺便说一句:按照惯例,变量名和函数应以小写开头,而大写用于类名)

【讨论】:

  • 很遗憾没有帮助
  • 如果你想从编辑文本中搜索一个词,你必须从视图中获取它。我在你的代码中没有看到。将 cs 更改为字符串,而不是 cs=null 在您的 Fragment 中执行类似 private EditText ed;在 OnCreate 中:ed = (EditText) rootView.findViewById(R.id.idofyourEditText),并在 performAction String cs = ed.getText().toString();
  • 我尝试了几次,但没有成功,我删除了提交按钮,我试图弄清楚如何做同样的事情,但使用“OnTextChanged”而不是按钮点击
  • 如果您发布片段和 xml 文件的完整代码,也许我们可以帮助您
  • 请花时间评估更改,我是处理列表和适配器的新手,我做了一些重大更改;提前致谢
猜你喜欢
  • 2011-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-10
  • 1970-01-01
  • 2017-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多