Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a nullobjectreference -
i trying fetch data sqlite database-> displaying in recyclerview -> , on tapping item want start new activity.
but after displaying list of items when tap on 1 of them following error pops up: java.lang.nullpointerexception: attempt invoke virtual method 'java.lang.string android.content.context.getpackagename()' on null object reference
my mainactivityclass:
import android.content.context; import android.content.intent; import android.database.cursor; import android.database.sqlite.sqliteexception; import android.support.annotation.nonnull; import android.support.design.widget.navigationview; import android.support.v4.widget.drawerlayout; import android.support.v7.app.actionbardrawertoggle; import android.support.v7.app.appcompatactivity; import android.os.bundle; import android.support.v7.widget.linearlayoutmanager; import android.support.v7.widget.recyclerview; import android.support.v7.widget.toolbar; import android.view.menuitem; import android.widget.toast; import com.example.blue2dew.trakin.item.item; import com.example.blue2dew.trakin.movieadapter; import java.util.arraylist; public class mainactivity extends appcompatactivity { private drawerlayout mdrawerlayout; private actionbardrawertoggle mtoggle; private navigationview navigationview; private toolbar toolbar; private movie_det movie_det; context context; private recyclerview recyclerview; private databasehelper databasehelper; arraylist<item> arraylist=new arraylist<item>(); private cursor cursor; private movieadapter movieadapter; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); mdrawerlayout=(drawerlayout) findviewbyid(r.id.activity_main); navigationview=(navigationview)findviewbyid(r.id.navigation_view); toolbar=(toolbar)findviewbyid(r.id.nav_action); setsupportactionbar(toolbar); mtoggle=new actionbardrawertoggle(this,mdrawerlayout,r.string.open,r.string.close); recyclerview=(recyclerview)findviewbyid(r.id.recycler_view); mdrawerlayout.adddrawerlistener(mtoggle); mtoggle.syncstate(); getsupportactionbar().setdisplayhomeasupenabled(true); navigationview.setnavigationitemselectedlistener(new navigationview.onnavigationitemselectedlistener() { @override public boolean onnavigationitemselected(@nonnull menuitem item) { item.setchecked(true); mdrawerlayout.closedrawers(); return false; } }); loaddatabase(); } @override public boolean onoptionsitemselected(menuitem item){ if(mtoggle.onoptionsitemselected(item)){ return true; } return super.onoptionsitemselected(item); } public void loaddatabase(){ databasehelper=new databasehelper(mainactivity.this); try{ databasehelper.checkandcopydatabase(); databasehelper.opendatabase(); }catch(sqliteexception e){ e.printstacktrace(); } try { cursor = databasehelper.querydata("select * moviedetails"); if (cursor != null) { if (cursor.movetofirst()) { { item itemv = new item(); itemv.setmoviename(cursor.getstring(2)); itemv.setreleasedate(cursor.getstring(5)); itemv.setmovieimage(cursor.getblob(1)); arraylist.add(itemv); } while (cursor.movetonext()); } } }catch (sqliteexception e){ e.printstacktrace(); } linearlayoutmanager linearlayoutmanager=new linearlayoutmanager(getapplicationcontext()); movieadapter=new movieadapter(mainactivity.this,context,arraylist); recyclerview.sethasfixedsize(true); recyclerview.setlayoutmanager(linearlayoutmanager); recyclerview.setadapter(movieadapter); } } my adapter class:
package com.example.blue2dew.trakin; import android.app.activity; import android.content.context; import android.content.intent; import android.support.v7.widget.recyclerview; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.imageview; import android.widget.textview; import com.example.blue2dew.trakin.item.item; import java.util.collections; import java.util.list; public class movieadapter extends recyclerview.adapter<movieadapter.movieviewholder> { activity activity; list<item> items= collections.emptylist(); context context; public movieadapter(activity activity,context context, list<item> items){ this.activity=activity; this.context=context; this.items=items; } @override public movieviewholder oncreateviewholder(viewgroup parent, int viewtype) { view view= layoutinflater.from(parent.getcontext()).inflate(r.layout.custom_list_item,parent,false); movieviewholder movieviewholder=new movieviewholder(view,context,items); return movieviewholder; } public void onbindviewholder(movieviewholder holder,final int position) { holder.movie_name.settext(items.get(position).getmoviename()); holder.release_date.settext(items.get(position).getreleasedate()); holder.imageview.setimagebitmap(items.get(position).getmovieimage()); } @override public int getitemcount() { return items.size(); } public class movieviewholder extends recyclerview.viewholder implements view.onclicklistener{ imageview md_image; textview md_movie_name; textview md_length1; textview md_genre1; textview md_release_date1; imageview md_imdb_icon; textview md_rating1; textview md_director1; textview md_synopsis1; textview movie_name; textview release_date; imageview imageview; list<item> items=collections.emptylist(); context context; public movieviewholder(view itemview,context context,list<item> items ) { super(itemview); this.context=context; this.items=items; itemview.setonclicklistener(this); md_image = (imageview) itemview.findviewbyid(r.id.md_image); md_director1 = (textview) itemview.findviewbyid(r.id.md_director1); md_genre1 = (textview) itemview.findviewbyid(r.id.md_genre1); md_movie_name = (textview) itemview.findviewbyid(r.id.md_movie_name); md_length1 = (textview) itemview.findviewbyid(r.id.md_length1); md_release_date1 = (textview) itemview.findviewbyid(r.id.md_release_date1); md_rating1 = (textview) itemview.findviewbyid(r.id.md_rating1); md_synopsis1 = (textview)itemview.findviewbyid(r.id.md_synopsis1); md_imdb_icon = (imageview) itemview.findviewbyid(r.id.md_imdb_icon); movie_name=(textview) itemview.findviewbyid(r.id.movie_name); release_date=(textview) itemview.findviewbyid(r.id.release_date); imageview=(imageview) itemview.findviewbyid(r.id.imageview); } @override public void onclick(view v) { int position=getadapterposition(); item item=this.items.get(position); intent intent=new intent (this.context,main2activity.class); this.context.startactivity(intent); } } } my databasehelper class: package com.example.blue2dew.trakin;
import android.content.context; import android.database.cursor; import android.database.sqlite.sqlitedatabase; import android.database.sqlite.sqliteexception; import android.database.sqlite.sqliteopenhelper; import android.os.build; import android.os.environment; import android.util.log; import java.io.fileoutputstream; import java.io.ioexception; import java.io.inputstream; import java.io.outputstream; public class databasehelper extends sqliteopenhelper { private static string db_name="movie.db"; private static string db_path; private sqlitedatabase mydatabase; private final context mycontext; public databasehelper(context context) { super(context,db_name , null, 1); if(build.version.sdk_int>=15){ db_path=context.getapplicationinfo().datadir+"/databases/"; } else{ db_path= environment.getdatadirectory()+"/data/"+context.getpackagename()+"/databases/"; } this.mycontext=context; } @override public void oncreate(sqlitedatabase db) { //using existing database creation not needed } @override public void onupgrade(sqlitedatabase db, int oldversion, int newversion) { //the existing database need not upgraded } public void checkandcopydatabase(){ boolean dbexist=checkdatabase(); if(dbexist){ log.d("tag","database exists"); } else { this.getreadabledatabase(); } try { copydatabase(); } catch (ioexception e){ e.printstacktrace(); log.d("tag","error copy database"); } } public boolean checkdatabase(){ sqlitedatabase checkdb=null; try { string mypath = db_path + db_name; checkdb = sqlitedatabase.opendatabase(mypath, null, sqlitedatabase.open_readwrite); }catch (sqliteexception e) { e.printstacktrace(); } if(checkdb!=null){ checkdb.close(); } return checkdb!=null?true:false; } public void copydatabase() throws ioexception{ inputstream myinput=mycontext.getassets().open(db_name); string outfilename=db_path+db_name; outputstream myoutput=new fileoutputstream(outfilename); byte[] buffer=new byte[1024]; int length; while ((length=myinput.read(buffer))>0){ myoutput.write(buffer,0,length); } myoutput.flush(); myoutput.close(); myinput.close(); } public void opendatabase(){ string mypath=db_path+db_name; mydatabase=sqlitedatabase.opendatabase(mypath,null, sqlitedatabase.open_readwrite); } public synchronized void close(){ if(mydatabase!=null){ mydatabase.close(); } super.close(); } public cursor querydata(string query){ return mydatabase.rawquery(query,null); } } the error:
e/androidruntime: fatal exception: main process: com.example.blue2dew.trakin, pid: 7430 java.lang.nullpointerexception: attempt invoke virtual method 'java.lang.string android.content.context.getpackagename()' on null object reference @ android.content.componentname.(componentname.java:128) @ android.content.intent.(intent.java:4521) @ com.example.blue2dew.trakin.movieadapter$movieviewholder.onclick(movieadapter.java:127) @ android.view.view.performclick(view.java:5209) @ android.view.view$performclick.run(view.java:21179) @ android.os.handler.handlecallback(handler.java:739) @ android.os.handler.dispatchmessage(handler.java:95) @ android.os.looper.loop(looper.java:148) @ android.app.activitythread.main(activitythread.java:5437) @ java.lang.reflect.method.invoke(native method) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:726) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:616)
you can either this,
@override public void onclick(view v) { int position=getadapterposition(); item item=this.items.get(position); intent intent=new intent (v.getcontext(),main2activity.class); v.getcontext().startactivity(intent); }
Comments
Post a Comment