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
Post a Comment