android - Null Pointer Exception on custom pageradapter -
the code below adapter viewpager.
import android.content.context; import android.support.v4.view.pageradapter; import android.support.v4.view.viewpager; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.linearlayout; import android.widget.textview; import com.androidquery.aquery; public class viewpageradapter2 extends pageradapter { context context; string[] image1; string[] description; layoutinflater inflater; public viewpageradapter2(context context, string[] image1,string[] description) { this.context = context; this.image1 = image1; this.description=description; } @override public boolean isviewfromobject(view view, object object) { return view == ((linearlayout) object); } @override public object instantiateitem(viewgroup container, int position) { textview des; inflater = (layoutinflater) context .getsystemservice(context.layout_inflater_service); view itemview = inflater.inflate(r.layout.slider, container, false); des = (textview) itemview.findviewbyid(r.id.slider_des); des.settext(description[position]); aquery aq = new aquery(itemview); aq.id(r.id.imageview1).image(image1[position]); ((viewpager) container).removeview(itemview); ((viewpager) container).addview(itemview); return itemview; } @override public void destroyitem(viewgroup container, int position, object object) { ((viewpager) container).removeview((linearlayout) object); } @override public int getcount() { // todo auto-generated method stub return description.length; } }
the code fragment:
public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { linearlayout mlinearlayout = (linearlayout) inflater.inflate( r.layout.home, container, false); new getfromwebservice().execute(); viewpager1 = (viewpager) mlinearlayout.findviewbyid(r.id.pager); adapter1= new viewpageradapter2(mlinearlayout.getcontext(),image,title); viewpager1.setadapter(adapter1); //listview list = (listview) mlinearlayout.findviewbyid(r.id.listview1); //onadapter listadapter = new onadapter(getactivity(),id,label,title,image,hrs,posted_date); //list.setadapter(listadapter); return mlinearlayout; }
my logcat output:
07-31 16:27:05.868: e/androidruntime(1364): fatal exception: main 07-31 16:27:05.868: e/androidruntime(1364): java.lang.runtimeexception: unable start activity componentinfo{com.lyfcha/com.lyfcha.testmainactivity}: java.lang.nullpointerexception 07-31 16:27:05.868: e/androidruntime(1364): @ android.app.activitythread.performlaunchactivity(activitythread.java:2110) 07-31 16:27:05.868: e/androidruntime(1364): @ android.app.activitythread.handlelaunchactivity(activitythread.java:2135) 07-31 16:27:05.868: e/androidruntime(1364): @ android.app.activitythread.access$700(activitythread.java:140) 07-31 16:27:05.868: e/androidruntime(1364): @ android.app.activitythread$h.handlemessage(activitythread.java:1237) 07-31 16:27:05.868: e/androidruntime(1364): @ android.os.handler.dispatchmessage(handler.java:99) 07-31 16:27:05.868: e/androidruntime(1364): @ android.os.looper.loop(looper.java:137) 07-31 16:27:05.868: e/androidruntime(1364): @ android.app.activitythread.main(activitythread.java:4921) 07-31 16:27:05.868: e/androidruntime(1364): @ java.lang.reflect.method.invokenative(native method) 07-31 16:27:05.868: e/androidruntime(1364): @ java.lang.reflect.method.invoke(method.java:511) 07-31 16:27:05.868: e/androidruntime(1364): @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:1027) 07-31 16:27:05.868: e/androidruntime(1364): @ com.android.internal.os.zygoteinit.main(zygoteinit.java:794) 07-31 16:27:05.868: e/androidruntime(1364): @ dalvik.system.nativestart.main(native method) 07-31 16:27:05.868: e/androidruntime(1364): caused by: java.lang.nullpointerexception 07-31 16:27:05.868: e/androidruntime(1364): @ com.lyfcha.viewpageradapter2.getcount(viewpageradapter2.java:69) 07-31 16:27:05.868: e/androidruntime(1364): @ android.support.v4.view.viewpager.setadapter(viewpager.java:432) 07-31 16:27:05.868: e/androidruntime(1364): @ com.lyfcha.home1.oncreateview(home1.java:56) 07-31 16:27:05.868: e/androidruntime(1364): @ android.support.v4.app.fragment.performcreateview(fragment.java:1460) 07-31 16:27:05.868: e/androidruntime(1364): @ android.support.v4.app.fragmentmanagerimpl.movetostate(fragmentmanager.java:911) 07-31 16:27:05.868: e/androidruntime(1364): @ android.support.v4.app.fragmentmanagerimpl.movetostate(fragmentmanager.java:1088) 07-31 16:27:05.868: e/androidruntime(1364): @ android.support.v4.app.backstackrecord.run(backstackrecord.java:682) 07-31 16:27:05.868: e/androidruntime(1364): @ android.support.v4.app.fragmentmanagerimpl.execpendingactions(fragmentmanager.java:1444) 07-31 16:27:05.868: e/androidruntime(1364): @ android.support.v4.app.fragmentactivity.onstart(fragmentactivity.java:551) 07-31 16:27:05.868: e/androidruntime(1364): @ android.app.instrumentation.callactivityonstart(instrumentation.java:1178) 07-31 16:27:05.868: e/androidruntime(1364): @ android.app.activity.performstart(activity.java:5216) 07-31 16:27:05.868: e/androidruntime(1364): @ android.app.activitythread.performlaunchactivity(activitythread.java:2083) 07-31 16:27:05.868: e/androidruntime(1364): ... 11 more
what ive done: 1. obtained required data json in string arrays. 2. ive written adapter viewpager feed contents it.
where have run problem:
application throws null pointer exception, in oncreateview of fragment stating getcount of adapter throws npe. sure string array's length isn't null (tested in display window in debug perspective).
any appreciated.
you should fill adapter asynctask use data. since getfromwebservice
executing in different thread, line
adapter1= new viewpageradapter2(mlinearlayout.getcontext(),image,title);
will still not have data other thread. so, solution move following lines:
linearlayout mlinearlayout = (linearlayout) inflater.inflate( r.layout.home, container, false); viewpager1 = (viewpager) mlinearlayout.findviewbyid(r.id.pager); adapter1= new viewpageradapter2(mlinearlayout.getcontext(),image,title); viewpager1.setadapter(adapter1);
to onpostexecute()
method of asynctask getfromwebservice
Comments
Post a Comment