Android Studio Drawing Application: Unfortunately App, has stopped -
my app continues stop , don't know why. drawing app in fragment allows user draw. beginner programmer assistance great thank you!
field fragment:
package com.example.marlon.fieldapp; import android.app.dialogfragment; import android.content.context; import android.graphics.color; import android.media.image; import android.net.uri; import android.os.bundle; import android.app.fragment; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.imagebutton; import android.widget.linearlayout; import java.util.uuid; import android.provider.mediastore; import android.app.alertdialog; import android.app.dialog; import android.content.dialoginterface; import android.view.view.onclicklistener; import android.widget.toast; /** * simple {@link fragment} subclass. * activities contain fragment must implement * {@link field_fragment.onfragmentinteractionlistener} interface * handle interaction events. * use {@link field_fragment#newinstance} factory method * create instance of fragment. */ public class field_fragment extends fragment implements onclicklistener { // todo: rename parameter arguments, choose names match // fragment initialization parameters, e.g. arg_item_number private static final string arg_param1 = "param1"; private static final string arg_param2 = "param2"; // todo: rename , change types of parameters private string mparam1; private string mparam2; private drawingview drawview; private imagebutton currpaint, drawbtn; private float smallbrush, mediumbrush, largebrush; private onfragmentinteractionlistener mlistener; public field_fragment() { // required empty public constructor } /** * use factory method create new instance of * fragment using provided parameters. * * @param param1 parameter 1. * @param param2 parameter 2. * @return new instance of fragment field_fragment. */ // todo: rename , change types , number of parameters public static field_fragment newinstance(string param1, string param2) { field_fragment fragment = new field_fragment(); bundle args = new bundle(); args.putstring(arg_param1, param1); args.putstring(arg_param2, param2); fragment.setarguments(args); return fragment; } @override public void oncreate(bundle savedinstancestate) { smallbrush = getresources().getinteger(r.integer.small_size); mediumbrush = getresources().getinteger(r.integer.medium_size); largebrush = getresources().getinteger(r.integer.large_size); drawbtn = (imagebutton)getview().findviewbyid(r.id.draw_btn); drawbtn.setonclicklistener(this); drawview.setbrushsize(mediumbrush); super.oncreate(savedinstancestate); if (getarguments() != null) { mparam1 = getarguments().getstring(arg_param1); mparam2 = getarguments().getstring(arg_param2); } } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { // inflate layout fragment drawview = (drawingview) drawview.findviewbyid(r.id.drawing); linearlayout paintlayout = (linearlayout) getview().findviewbyid(r.id.paint_colours); currpaint = (imagebutton)paintlayout.getchildat(0); currpaint.setimagedrawable(getresources().getdrawable(r.drawable.paint_pressed)); return getview(); } // todo: rename method, update argument , hook method ui event public void onbuttonpressed(uri uri) { if (mlistener != null) { mlistener.onfragmentinteraction(uri); } } @override public void onattach(context context) { super.onattach(context); if (context instanceof onfragmentinteractionlistener) { mlistener = (onfragmentinteractionlistener) context; } else { throw new runtimeexception(context.tostring() + " must implement onfragmentinteractionlistener"); } } @override public void ondetach() { super.ondetach(); mlistener = null; } /** * interface must implemented activities contain * fragment allow interaction in fragment communicated * activity , potentially other fragments contained in * activity. * <p/> * see android training lesson <a href= * "http://developer.android.com/training/basics/fragments/communicating.html" * >communicating other fragments</a> more information. */ public void paintclicked(view view) { if(view!=currpaint) { imagebutton imgview = (imagebutton)view; string color = view.gettag().tostring(); drawview.setcolor(color); } } @override public void onclick(view view) { //respond clicks if(view.getid()==r.id.draw_btn) { final dialog brushdialog; brushdialog = new dialog(getactivity()); brushdialog.settitle("brush size:"); brushdialog.setcontentview(r.layout.brush_chooser); imagebutton smallbtn = (imagebutton)brushdialog.findviewbyid(r.id.small_brush); smallbtn.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { drawview.setbrushsize(smallbrush); drawview.setlastbrushsize(smallbrush); brushdialog.dismiss(); } }); imagebutton mediumbtn = (imagebutton)brushdialog.findviewbyid(r.id.medium_brush); mediumbtn.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { drawview.setbrushsize(mediumbrush); drawview.setlastbrushsize(mediumbrush); brushdialog.dismiss(); } }); imagebutton largebtn = (imagebutton)brushdialog.findviewbyid(r.id.large_brush); largebtn.setonclicklistener(new onclicklistener(){ @override public void onclick(view v) { drawview.setbrushsize(largebrush); drawview.setlastbrushsize(largebrush); brushdialog.dismiss(); } }); brushdialog.show(); } } public interface onfragmentinteractionlistener { // todo: update argument type , name void onfragmentinteraction(uri uri); } } here's error i'm getting:
02-06 11:39:00.681 28557-28557/com.example.marlon.fieldapp e/androidruntime: fatal exception: main process: com.example.marlon.fieldapp, pid: 28557 java.lang.runtimeexception: unable start activity componentinfo{com.example.marlon.fieldapp/com.example.marlon.fieldapp.mainactivity}: java.lang.nullpointerexception: attempt invoke virtual method 'android.view.view android.view.view.findviewbyid(int)' on null object reference @ android.app.activitythread.performlaunchactivity(activitythread.java:2339) @ android.app.activitythread.handlelaunchactivity(activitythread.java:2413) @ android.app.activitythread.access$800(activitythread.java:155) @ android.app.activitythread$h.handlemessage(activitythread.java:1317) @ android.os.handler.dispatchmessage(handler.java:102) @ android.os.looper.loop(looper.java:135) @ android.app.activitythread.main(activitythread.java:5343) @ java.lang.reflect.method.invoke(native method) @ java.lang.reflect.method.invoke(method.java:372) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:905) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:700) caused by: java.lang.nullpointerexception: attempt invoke virtual method 'android.view.view android.view.view.findviewbyid(int)' on null object reference @ com.example.marlon.fieldapp.field_fragment.oncreate(field_fragment.java:80) @ android.app.fragment.performcreate(fragment.java:2031) @ android.app.fragmentmanagerimpl.movetostate(fragmentmanager.java:863) @ android.app.fragmentmanagerimpl.movetostate(fragmentmanager.java:1067) @ android.app.backstackrecord.run(backstackrecord.java:834) @ android.app.fragmentmanagerimpl.execpendingactions(fragmentmanager.java:1454) @ android.app.activity.performstart(activity.java:6025) @ android.app.activitythread.performlaunchactivity(activitythread.java:2302) @ android.app.activitythread.handlelaunchactivity(activitythread.java:2413) @ android.app.activitythread.access$800(activitythread.java:155) @ android.app.activitythread$h.handlemessage(activitythread.java:1317) @ android.os.handler.dispatchmessage(handler.java:102) @ android.os.looper.loop(looper.java:135) @ android.app.activitythread.main(activitythread.java:5343) @ java.lang.reflect.method.invoke(native method) @ java.lang.reflect.method.invoke(method.java:372) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:905) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:700)
in oncreateview should return inflated view.
view fragment.getview:
get root view fragment's layout (the 1 returned oncreateview(layoutinflater, viewgroup, bundle)), if provided.
at comment
// inflate layout fragment use provided inflater inflate layout resource. like
view fragmentview = inflater.inflate(r.layout.frag_view, container, false); return fragmentview.
you should move
drawbtn = (imagebutton)getview().findviewbyid(r.id.draw_btn); to oncreateview, after inflation. again, use inflated view, not getview().
Comments
Post a Comment