java - NullPointerException in getView method for ApkAdapter class which extends BaseAdapter -
i trying listview of user installed android apps show in fragment in android app. populating items using custom baseadapter.
since using fragment, running problems.
i had convert activity fragment. did successfully, after got runtime errors in adapter class.
06-23 00:40:53.824 23082-23082/com.spicycurryman.getdisciplined10.app e/androidruntime﹕ fatal exception: main java.lang.nullpointerexception @ com.ibc.android.demo.appslist.app.apkadapter.getview(apkadapter.java:50)
layoutinflator line 50 error is
layoutinflater inflater = (layoutinflater) convertview.getcontext().getsystemservice( context.layout_inflater_service );
i did research
nullpointerexception in getview of adapter extends baseadapter
extends baseadapter appear nullpointerexception
and attempted follow these; however, solution still produced error.
i not sure why convertview == null
false.
package com.ibc.android.demo.appslist.app; import android.content.context; import android.content.pm.packageinfo; import android.content.pm.packagemanager; import android.graphics.drawable.drawable; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.baseadapter; import android.widget.textview; import com.spicycurryman.getdisciplined10.app.installedappactivity; import com.spicycurryman.getdisciplined10.app.r; import java.util.list; public class apkadapter extends baseadapter { list<packageinfo> packagelist; installedappactivity context; packagemanager packagemanager; public apkadapter(installedappactivity context, list<packageinfo> packagelist, packagemanager packagemanager) { super(); this.context = context; this.packagelist = packagelist; this.packagemanager = packagemanager; } private class viewholder { textview apkname; } public int getcount() { homecoming packagelist.size(); } public object getitem(int position) { homecoming packagelist.get(position); } public long getitemid(int position) { homecoming 0; } public view getview(int position, view convertview, viewgroup parent) { viewholder holder; // layoutinflator line 50 error layoutinflater inflater = (layoutinflater) convertview.getcontext().getsystemservice( context.layout_inflater_service ); if (convertview == null) { convertview = inflater.inflate(r.layout.installed_apps, null); holder = new viewholder(); holder.apkname = (textview) convertview.findviewbyid(r.id.appname); convertview.settag(holder); } else { holder = (viewholder) convertview.gettag(); } packageinfo packageinfo = (packageinfo) getitem(position); drawable appicon = packagemanager .getapplicationicon(packageinfo.applicationinfo); string appname = packagemanager.getapplicationlabel( packageinfo.applicationinfo).tostring(); appicon.setbounds(0, 0, 65, 65); holder.apkname.setcompounddrawables(appicon, null, null, null); holder.apkname.setcompounddrawablepadding(15); holder.apkname.settext(appname); homecoming convertview; } }
here fragment class:
package com.spicycurryman.getdisciplined10.app; import android.support.v4.app.fragment; import android.content.pm.applicationinfo; import android.content.pm.packageinfo; import android.content.pm.packagemanager; import android.os.bundle; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.adapterview; import android.widget.adapterview.onitemclicklistener; import android.widget.listview; import com.ibc.android.demo.appslist.app.apkadapter; import java.util.arraylist; import java.util.list; public class installedappactivity extends fragment implements onitemclicklistener { packagemanager packagemanager; listview apklist; @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view rootview = inflater.inflate(r.layout.installed_apps, container, false); packagemanager = getactivity().getpackagemanager(); list<packageinfo> packagelist = packagemanager .getinstalledpackages(packagemanager.get_permissions); list<packageinfo> packagelist1 = new arraylist<packageinfo>(); /*to filter out scheme apps*/ for(packageinfo pi : packagelist) { boolean b = issystempackage(pi); if(!b) { packagelist1.add(pi); } } apklist = (listview) rootview.findviewbyid(r.id.applist); apklist.setadapter(new apkadapter(this, packagelist1, packagemanager)); apklist.setonitemclicklistener(this); homecoming rootview; } /** * homecoming whether given packgeinfo represents scheme bundle or not. * user-installed packages (market or otherwise) should not denoted * scheme packages. * * @param pkginfo * @return boolean */ private boolean issystempackage(packageinfo pkginfo) { homecoming ((pkginfo.applicationinfo.flags & applicationinfo.flag_system) != 0) ? true : false; } // don't need in fragment /* @override public boolean oncreateoptionsmenu(menu menu) { getmenuinflater().inflate(r.menu.block, menu); homecoming true; }*/ @override public void onitemclick(adapterview<?> adapterview, view view, int i, long l) { } }
please remember installedappactivity fragment.
edit:
here updated errors
change this
apklist.setadapter(new apkadapter(this, packagelist1, packagemanager));
to
apklist.setadapter(new apkadapter(getactivity(), packagelist1, packagemanager));
this
in fragment not refer valid context.
also
layoutinflater inflater; // declare instance variable
then in constructor
public apkadapter(context context, list<packageinfo> packagelist, packagemanager packagemanager) { super(); inflater = layoutinflater.from(context); // can initialize here
java android listview android-fragments nullpointerexception
No comments:
Post a Comment