执行搜索查询时出现致命异常

Fatal Exception while performing search query

我有一个片段,在该片段内部我刚刚添加了一个 searchView 和 ListView 并尝试执行 searhcQuery 但每次在 searchView 中键入任何内容时都无法获得所需的结果我的应用程序崩溃了这是怎么回事我实现了 searchView -

Search_View.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
    @Override
    public boolean onQueryTextSubmit(String Text) {
        notesAdapter.getFilter().filter(Text);
        return true;
    }

    @Override
    public boolean onQueryTextChange(String newText) {
        notesAdapter.getFilter().filter(newText);
        return true;

    }
});

这就是错误所在 -

01-21 22:53:29.995 1676-1836/? E/bst_gps: bstgps: failed to open device. err: 2.
    01-21 22:53:31.535 6763-6763/? E/InputEventSender: Exception dispatching finished signal.
    01-21 22:53:31.535 6763-6763/? E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback
    01-21 22:53:31.545 6763-6763/? E/MessageQueue-JNI: java.lang.NullPointerException
    at pb.myapp.TabFragment2.onQueryTextChange(TabFragment2.java:176)
    at android.widget.SearchView.onTextChanged(SearchView.java:1153)
    at android.widget.SearchView.access00(SearchView.java:92)
    at android.widget.SearchView.onTextChanged(SearchView.java:1638)
    at android.widget.TextView.sendOnTextChanged(TextView.java:7408)
    at android.widget.TextView.handleTextChanged(TextView.java:7467)
    at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:9183)
    at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:962)
    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:496)
    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:435)
    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:30)
    at android.text.method.QwertyKeyListener.onKeyDown(QwertyKeyListener.java:223)
    at android.text.method.TextKeyListener.onKeyDown(TextKeyListener.java:136)
    at android.widget.TextView.doKeyDown(TextView.java:5532)
    at android.widget.TextView.onKeyDown(TextView.java:5343)
    at android.widget.AutoCompleteTextView.onKeyDown(AutoCompleteTextView.java:716)
    at android.view.KeyEvent.dispatch(KeyEvent.java:2640)
    at android.view.View.dispatchKeyEvent(View.java:7696)
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
    at android.support.v4.view.ViewPager.dispatchKeyEvent(ViewPager.java:2567)
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1408)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2035)
    at com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1505)
    at android.app.Activity.dispatchKeyEvent(Activity.java:2418)
    at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:50)
    at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:224)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1962)
    at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:3852)
    at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3826)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418)
    at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3525)
    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3426)
    at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3582)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418)
    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3426)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3399)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3449)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3418)
    at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3558)
    at and
    01-21 22:53:31.545 6763-6763/? D/AndroidRuntime: Shutting down VM
    01-21 22:53:31.545 6763-6763/? W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0xa4d68b20)
    01-21 22:53:31.545 1880-1979/? D/BstCommandProcessor-Application: Application crash has been observed.
    01-21 22:53:31.545 1880-1979/? W/BstCommandProcessor-Application: in sendHttpRequest, requestType is of CRASH_APP type but one of the requiredInfo is NULL, crashedApp = com.bluestacks.BstCommandProcessor.BstCrashedAppInfo@528037b8
    01-21 22:53:31.545 1880-1979/? D/BstCommandProcessor-Application: in sendHttpRequest, request to send to (fqdn): http://10.0.2.2:2861/AppCrashedInfo
    data: {"packageName":"pb.myapp","shortPackageName":"pb.myapp","versionCode":1,"versionName":"1.0"}
    01-21 22:53:31.545 6763-6763/? D/AndroidRuntime: procName from cmdline: pb.pocketboard
    01-21 22:53:31.545 6763-6763/? E/AndroidRuntime: in writeCrashedAppName, pkgName :pb.pocketboard
    01-21 22:53:31.545 6763-6763/? D/AndroidRuntime: file written successfully with content: pb.pocketboard StringBuffer : ;pb.pocketboard
    01-21 22:53:31.555 6763-6763/? I/Process: Sending signal. PID: 6763 SIG: 9
    01-21 22:53:31.555 6763-6763/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: pb.myapp, PID: 6763
    java.lang.NullPointerException
    at pb.pocketboard.TabFragment2.onQueryTextChange(TabFragment2.java:176)
    at android.widget.SearchView.onTextChanged(SearchView.java:1153)
    at android.widget.SearchView.access00(SearchView.java:92)
    at android.widget.SearchView.onTextChanged(SearchView.java:1638)
    at android.widget.TextView.sendOnTextChanged(TextView.java:7408)
    at android.widget.TextView.handleTextChanged(TextView.java:7467)
    at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:9183)
    at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:962)
    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:496)
    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:435)
    at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:30)
    at android.text.method.QwertyKeyListener.onKeyDown(QwertyKeyListener.java:223)
    at android.text.method.TextKeyListener.onKeyDown(TextKeyListener.java:136)
    at android.widget.TextView.doKeyDown(TextView.java:5532)
    at android.widget.TextView.onKeyDown(TextView.java:5343)
    at android.widget.AutoCompleteTextView.onKeyDown(AutoCompleteTextView.java:716)
    at android.view.KeyEvent.dispatch(KeyEvent.java:2640)
    at android.view.View.dispatchKeyEvent(View.java:7696)

我的整个代码:-

public class TabFragment2 extends Fragment {



ArrayList <String> notesObject;

ArrayAdapter<ParseObject> notesAdapter;
ArrayAdapter<String> CarsAdapter;
 ListView List_View;
SearchView Search_View;



SwipeRefreshLayout swipeToReload;




@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    final View view = inflater.inflate(R.layout.tab_fragment_2, container, false);


    List_View = (ListView) view.findViewById(R.id.notesList);
    Search_View = (SearchView)  view.findViewById(R.id.searchView);

    swipeToReload = (SwipeRefreshLayout)  view.findViewById(R.id.swipe_refresh_layout);






    ParseQuery<ParseObject> query = ParseQuery.getQuery("Notes");
    query.whereExists("Title");
    query.fromLocalDatastore();
    query.findInBackground(new FindCallback<ParseObject>() {

                               @Override
                               public void done(List<ParseObject> list,
                                                ParseException e) {

                                   if (e == null) {

                                       if (list.size() <= 0) {

                                           Toast.makeText(getActivity(), "No results", Toast.LENGTH_LONG).show();
                                       }

                                       ArrayList<String> notesArray = new ArrayList<String>();
                                       for (ParseObject j : list) {

                                           notesArray.add(j.getString("Title"));
                                       }

                                       ArrayAdapter notesAdapter = new  ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, notesArray);
                                       List_View.setAdapter(notesAdapter);
                                   } else {

                                       e.getMessage();
                                       Log.d("" + e.getMessage(), " errorr");
                                   }

                               }
                           }
    );



    swipeToReload.setOnRefreshListener(new  SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            Log.i("", "onRefresh called from SwipeRefreshLayout");


            ParseQuery<ParseObject> query = ParseQuery.getQuery("Notes");
            query.whereExists("Title");
            query.findInBackground(new FindCallback<ParseObject>() {

                                       @Override
                                       public void done(List<ParseObject> list,
                                                        ParseException e) {

                                           if (e == null) {


                                               try {

                                                   ParseObject.pinAll(list);

                                               } catch (Exception pinE) {

                                                    Toast.makeText(getActivity(), "Pinning Failed", Toast.LENGTH_LONG).show();

                                               }

                                               ArrayList<String> notesArray = new ArrayList<String>();
                                               for (ParseObject j : list) {

                                                   notesArray.add(j.getString("Title"));
                                               }

                                               ArrayAdapter notesAdapter = new  ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, notesArray);
                                                List_View.setAdapter(notesAdapter);

                                               swipeToReload.setRefreshing(false);
                                               notesAdapter.notifyDataSetChanged();
                                               Toast.makeText(getActivity(), "Refresh Done", Toast.LENGTH_LONG).show();


                                           } else {

                                               e.getMessage();
                                               Log.d("" + e.getMessage(), " errorr");
                                           }

                                       }
                                   }
            );


        }
    });



    Search_View.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

        @Override
        public boolean onQueryTextSubmit(String Text) {

            Log.d("tag","notesAdapter="+notesAdapter);
            notesAdapter.getFilter().filter(Text);

            return true;
        }

        @Override
        public boolean onQueryTextChange(String newText) {

            Log.d("tag","notesAdapter="+notesAdapter);
            notesAdapter.getFilter().filter(newText);

            return true;

        }
    });

    return view;

}



 public  void getNotesFromServer(){


    ParseQuery<ParseObject> query = ParseQuery.getQuery("Notes");
    query.findInBackground(new FindCallback<ParseObject>() {

        @Override
        public void done(List<ParseObject> list,
                         ParseException e) {
            // TODO Auto-generated method stub
            if (e == null)
            {



                ArrayList <String> notesArray = new ArrayList<String>();
                for (ParseObject j : list){

                    notesArray.add(j.getString("Title"));
                }

                ArrayAdapter notesAdapter = new  ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1, notesArray );
                List_View.setAdapter(notesAdapter);



            } else {

                e.getMessage();
                Log.d(""+e.getMessage()," errorr");
            }

        }}
    );}

 }

确保您的适配器不是 null。你可以简单地通过像

这样的日志来做到这一点
Log.d("tag","notesAdapter="+notesAdapter);
notesAdapter.getFilter().filter(newText);

然后检查 logcat 以查看 notesAdapter 是否给出 notesAdapter=null。如果是这样,那么问题出在您的适配器上。

其次,转到自定义列表适配器 class 中的 getfilter 方法,并确保您的过滤器没有 return null。它 必须 return 你的过滤器。