Why am I keep getting a java.lang.nullpointerexception in Android Studio? -
so trying pass text in 1 fragment main activity, , have main activity pass fragment can displayed.
here code of fragment send main activity:
public class topfragment extends fragment{ private static edittext topinput; private static edittext bottominput; fragmentinterface communicate; public interface fragmentinterface{ public void sendtheinput(string toptext,string bottomtext); } @nullable @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view view = inflater.inflate(r.layout.top_fragment,container,false); topinput = (edittext) view.findviewbyid(r.id.topinput); bottominput = (edittext) view.findviewbyid(r.id.bottominput); final button submitbutton = (button)view.findviewbyid(r.id.submitbutton); submitbutton.setonclicklistener( new view.onclicklistener(){ public void onclick(view v){ buttonclicked(v); } } ); return view; } public void buttonclicked(view view){ communicate.sendtheinput(topinput.gettext().tostring(),bottominput.gettext().tostring()); } }
here bit of code in main activity:
@override public void sendtheinput(string toptext, string bottomtext) { bottomfragment bottomfrag = (bottomfragment)getsupportfragmentmanager().findfragmentbyid(r.id.bottomfragment); bottomfrag.setboxtext(toptext,bottomtext); }
and here code of fragment display text:
public class bottomfragment extends fragment{ private static edittext toptextbox; private static edittext bottomtextbox; @nullable @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view view = inflater.inflate(r.layout.bottom_fragment,container,false); return view; } public void setboxtext(string toptext, string bottomtext){ toptextbox.settext(toptext); bottomtextbox.settext(bottomtext); } }
when run app have no runtime errors when click button in me emulator this:
08-07 13:20:48.125 4011-4011/com.example.vanessaanthony.fragmentreview e/androidruntime﹕ fatal exception: main process: com.example.vanessaanthony.fragmentreview, pid: 4011 java.lang.nullpointerexception: attempt invoke interface method 'void com.example.vanessaanthony.fragmentreview.topfragment$fragmentinterface.sendtheinput(java.lang.string, java.lang.string)' on null object reference @ com.example.vanessaanthony.fragmentreview.topfragment.buttonclicked(topfragment.java:44) @ com.example.vanessaanthony.fragmentreview.topfragment$1.onclick(topfragment.java:35) @ android.view.view.performclick(view.java:4780) @ android.view.view$performclick.run(view.java:19866) @ android.os.handler.handlecallback(handler.java:739) @ android.os.handler.dispatchmessage(handler.java:95) @ android.os.looper.loop(looper.java:135) @ android.app.activitythread.main(activitythread.java:5257) @ java.lang.reflect.method.invoke(native method) @ java.lang.reflect.method.invoke(method.java:372) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:903) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:698)
why getting error message?
you forgot set communicate
in fragment. i'd recommend doing in onattach
public class topfragment extends fragment { private static edittext topinput; private static edittext bottominput; fragmentinterface communicate; public interface fragmentinterface{ public void sendtheinput(string toptext,string bottomtext); } @nullable @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view view = inflater.inflate(r.layout.top_fragment,container,false); topinput = (edittext) view.findviewbyid(r.id.topinput); bottominput = (edittext) view.findviewbyid(r.id.bottominput); final button submitbutton = (button)view.findviewbyid(r.id.submitbutton); submitbutton.setonclicklistener( new view.onclicklistener(){ public void onclick(view v){ buttonclicked(v); } } ); return view; } public void onattach(activity activity) { super.onattach(activity); communicate = (fragmentinterface) activity; } public void buttonclicked(view view){ communicate.sendtheinput(topinput.gettext().tostring(),bottominput.gettext().tostring()); } }
make sure activity implements fragmentinterface
Comments
Post a Comment