java - Null Object when closing voice recognition dialog -


hello crating app opens social networks voice recognition,the app working well,but if voice recognition dialog pops , press button without saying app force close, part of code logcat pointing :

if (firstword.equals("open")) {             packagemanager packagemanager = getpackagemanager();             list<packageinfo> packs = packagemanager                     .getinstalledpackages(0);             int size = packs.size();             boolean uninstallapp = false;             boolean exceptflg = false;             (int v = 0; v < size; v++) {                 packageinfo p = packs.get(v);                 string tmpappname = p.applicationinfo.loadlabel(                         packagemanager).tostring();                 string pname = p.packagename;                 tmpappname = tmpappname.tolowercase();                 if (tmpappname.trim().tolowercase().                         equals(secondword.trim().tolowercase())) {                      packagemanager pm = this.getpackagemanager();                     intent appstartintent = pm.getlaunchintentforpackage(pname);                       if (null != appstartintent) {                         try {                             toast.maketext(getapplicationcontext(), "that app not social 1 ;-) )",                                     toast.length_long).show();                         } catch (exception e) {                         }                     }                 }             }         }  // end of open app code 

i tried add }else{but didn't work,

logcat

 caused by: java.lang.nullpointerexception: attempt invoke virtual method 'boolean java.lang.string.equals(java.lang.object)' on null object reference             @ mrad4tech.com.test.mainactivity.onactivityresult(mainactivity.java:94)             @ android.app.activity.dispatchactivityresult(activity.java:6140)             @ android.app.activitythread.deliverresults(activitythread.java:3535)             at android.app.activitythread.handlesendresult(activitythread.java:3582)             at android.app.activitythread.access$1300(activitythread.java:144)             at android.app.activitythread$h.handlemessage(activitythread.java:1327)             at android.os.handler.dispatchmessage(handler.java:102)             at android.os.looper.loop(looper.java:135)             at android.app.activitythread.main(activitythread.java:5223)             at java.lang.reflect.method.invoke(native method)             at java.lang.reflect.method.invoke(method.java:372)             at com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:898)             at com.android.internal.os.zygoteinit.main(zygoteinit.java:693) 09-25 20:12:26.265    7041-7041/mrad4tech.com.test e/androidruntime﹕ fatal exception: main     process: mrad4tech.com.test, pid: 7041     java.lang.runtimeexception: failure delivering result resultinfo{who=null, request=1234, result=0, data=null} activity {mrad4tech.com.test/mrad4tech.com.test.mainactivity}: java.lang.nullpointerexception: attempt invoke virtual method 'boolean java.lang.string.equals(java.lang.object)' on null object reference             @ android.app.activitythread.deliverresults(activitythread.java:3539)             @ android.app.activitythread.handlesendresult(activitythread.java:3582)             @ android.app.activitythread.access$1300(activitythread.java:144)             @ android.app.activitythread$h.handlemessage(activitythread.java:1327)             @ android.os.handler.dispatchmessage(handler.java:102)             @ android.os.looper.loop(looper.java:135)             @ android.app.activitythread.main(activitythread.java:5223)             @ java.lang.reflect.method.invoke(native method)             @ java.lang.reflect.method.invoke(method.java:372)             @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:898)             @ com.android.internal.os.zygoteinit.main(zygoteinit.java:693)      caused by: java.lang.nullpointerexception: attempt invoke virtual method 'boolean java.lang.string.equals(java.lang.object)' on null object reference             @ mrad4tech.com.test.mainactivity.onactivityresult(mainactivity.java:94)             @ android.app.activity.dispatchactivityresult(activity.java:6140)             @ android.app.activitythread.deliverresults(activitythread.java:3535)             at android.app.activitythread.handlesendresult(activitythread.java:3582)             at android.app.activitythread.access$1300(activitythread.java:144)             at android.app.activitythread$h.handlemessage(activitythread.java:1327)             at android.os.handler.dispatchmessage(handler.java:102)             at android.os.looper.loop(looper.java:135)             at android.app.activitythread.main(activitythread.java:5223)             at java.lang.reflect.method.invoke(native method)             at java.lang.reflect.method.invoke(method.java:372)             at com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:898)             at com.android.internal.os.zygoteinit.main(zygoteinit.java:693) 

full code

import android.content.intent; import android.content.pm.applicationinfo; import android.content.pm.packageinfo; import android.content.pm.packagemanager; import android.os.bundle; import android.app.activity; import android.os.handler; import android.speech.recognizerintent; import android.speech.speechrecognizer; import android.util.log; import android.view.menu; import android.view.view; import android.widget.button; import android.widget.toast;  import java.lang.ref.weakreference; import java.util.arraylist; import java.util.list;  public class mainactivity extends activity {      private     static     final     int voice_recognition_request_code = 1234;     private static final string tag = string.valueof(1);      @override     public void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.activity_main);         button button1 = (button) findviewbyid(r.id.button1);         button1.setonclicklistener(new view.onclicklistener() {             @override             public void onclick(view v) {                  startvoicerecognitionactivity();             }         });      }      @override     public boolean oncreateoptionsmenu(menu menu) {         getmenuinflater().inflate(r.menu.menu_main, menu);         return                 true;     }      public void onclick(view v) {          switch (v.getid()) {              case r.id.button1:                 startvoicerecognitionactivity();                  break;          }       }       public void startvoicerecognitionactivity() {          intent intent = new intent(recognizerintent.action_recognize_speech);         intent.putextra(recognizerintent.extra_calling_package, getclass()                 .getpackage().getname());         intent.putextra(recognizerintent.extra_language_model,                 recognizerintent.language_model_free_form);         intent.putextra(recognizerintent.extra_max_results, 5);         startactivityforresult(intent, voice_recognition_request_code);     }      @override     protected void onactivityresult(int requestcode, int resultcode, intent data) {         string wordstr = null;         string[] words = null;         string firstword = null;         string secondword = null;         if (requestcode == voice_recognition_request_code                 && resultcode == result_ok) {             arraylist<string> matches = data                     .getstringarraylistextra(recognizerintent.extra_results);             wordstr = matches.get(0);             words = wordstr.split(" ");             firstword = words[0];             secondword = words[1];         }          if (firstword.equals("open")) {             packagemanager packagemanager = getpackagemanager();             list<packageinfo> packs = packagemanager                     .getinstalledpackages(0);             int size = packs.size();             boolean uninstallapp = false;             boolean exceptflg = false;             (int v = 0; v < size; v++) {                 packageinfo p = packs.get(v);                 string tmpappname = p.applicationinfo.loadlabel(                         packagemanager).tostring();                 string pname = p.packagename;                 tmpappname = tmpappname.tolowercase();                 if (tmpappname.trim().tolowercase().                         equals(secondword.trim().tolowercase())) {                      packagemanager pm = this.getpackagemanager();                     intent appstartintent = pm.getlaunchintentforpackage(pname);                       if (null != appstartintent) {                         try {                             toast.maketext(getapplicationcontext(), "that app not social 1 ;-) )",                                     toast.length_long).show();                         } catch (exception e) {                         }                     }                 }             }         }  // end of open app code         else {          }       }      } 

i tried add }else{ toast.maketext.....} didnt work

if (requestcode == voice_recognition_request_code                 && resultcode == result_ok) {             arraylist<string> matches = data                     .getstringarraylistextra(recognizerintent.extra_results);             wordstr = matches.get(0);             words = wordstr.split(" ");             firstword = words[0];             secondword = words[1];         } // ends above if          if (firstword.equals("open")) { 

it seems me continue if (firstword.equals... if result code wasn't result_ok. check if firstword equals something, if don't assign it.

edit: avoid confusion , overly indented code, can do

    @override     protected void onactivityresult(int requestcode, int resultcode, intent data) {       if (requestcode != voice_recognition_request_code || resultcode != result_ok) {           return; // don't       }       // assume have data       // ...     } 

Comments