Sunday, 15 April 2012

java - NullPointerException in getView method for ApkAdapter class which extends BaseAdapter -



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