2017-06-27 28 views
1

因此,我在我的應用程序中具有搜索功能,並且它對數據庫中的事情正常工作。但是當該項目不在我的數據庫中時,我收到了一個致命錯誤。如何根據火力點值檢查字符串

搜索功能有一個edittext按鈕,當按鈕被觸發時,它會檢查數據庫中edittext的引用。

這是我的代碼。

public void searchfunction() { 
    mArraylist.clear(); 
    final ChildEventListener msearchevent = new ChildEventListener() { 

     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 

      String msearchname = dataSnapshot.child("name").getValue(String.class); 

      final String url = dataSnapshot.child("url").getValue(String.class); 

      if (msearchname.toLowerCase().contains(searchapps.toLowerCase())) { 
       marrayAdapter2 = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, mArraylist); 
       mlv.setAdapter(marrayAdapter2); 

       mArraylist.add(msearchname); 
       mArraylist2.add(url); 
       marrayAdapter2.notifyDataSetChanged(); 
       mlv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
        @Override 
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
         DownloadFileFromURL dl = new DownloadFileFromURL(mContext, apkNames, mCurrentPhotoPath); 
         dl.execute(mArraylist2.get(position)); 
        } 
       }); 

      }else { 
       Toast.makeText(MainActivity.this, "No results found!",Toast.LENGTH_SHORT).show(); 
      } 

     } 


     @Override 
     public void onChildChanged(DataSnapshot dataSnapshot, String s) { 
      marrayAdapter2.notifyDataSetChanged(); 

     } 

     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot) { 
      marrayAdapter2.notifyDataSetChanged(); 
     } 

     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String s) { 
      marrayAdapter2.notifyDataSetChanged(); 
     } 

     @Override 
     public void onCancelled(FirebaseError firebaseError) { 
      marrayAdapter2.notifyDataSetChanged(); 
     } 
    }; 
    mListRef.child("Filmapps").addChildEventListener(msearchevent); 

我按一下按鈕是GetView功能 內處理,這是對我的按鈕的代碼單擊

mgoButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     searchapps = msearch.getText().toString().trim(); 
     searchfunction(); 
     InputMethodManager inputManager = (InputMethodManager) 
       getSystemService(Context.INPUT_METHOD_SERVICE); 

     inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 
       InputMethodManager.HIDE_NOT_ALWAYS); 
    } 
}); 

06-27 17:51:16.708 2938-2938/com.example.harrops.h20droidapp2 E/UncaughtException: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toLowerCase()' on a null object reference 
                        at com.example.harrops.h20droidapp2.actvities.MainActivity$3.onChildAdded(MainActivity.java:287) 
                        at com.firebase.client.core.ChildEventRegistration.fireEvent(ChildEventRegistration.java:48) 
                        at com.firebase.client.core.view.DataEvent.fire(DataEvent.java:45) 
                        at com.firebase.client.core.view.EventRaiser$1.run(EventRaiser.java:38) 
                        at android.os.Handler.handleCallback(Handler.java:751) 
                        at android.os.Handler.dispatchMessage(Handler.java:95) 
                        at android.os.Looper.loop(Looper.java:154) 
                        at android.app.ActivityThread.main(ActivityThread.java:6119) 
                        at java.lang.reflect.Method.invoke(Native Method) 
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

06-27 17:51:16.712 2938-3140/com.example.harrops。 h20droidapp2 d/FA:記錄事件(FE):_ae,捆綁[{_ O =崩潰,_sc = MainActivity,_si = 7357998494779803214,時間戳= 1498585876708,致命= 1}]

+0

發佈錯誤。 –

+0

什麼是錯誤? –

+0

好像是空指針,無論是'msearchname'還是'url'都是空的,也許都是這樣,將其空字符檢查 –

回答

2

getValue文檔

傳遞的類,從這個 快照與數據填充的一個實例,或null if there is no data at this location.

所以添加無效支票

if (msearchname!=null && url!=null && msearchname.toLowerCase().contains(searchapps.toLowerCase())) { 


注:&&是短路操作,如果有任何虛假表達價值,則意味着不會執行if

+0

謝謝#Pavneet – markharrop

+0

我很高興,我可以幫助,快樂編碼 –

+1

感謝您的解釋以及 – markharrop