my target share image imageview
inside recyclerview
image loaded internet using picasso
lib
i have added share button below each item setted onclick function cant proceed further.
i have data adapter :
package com.myapp.app; import android.content.context; import android.content.intent; import android.graphics.bitmap; import android.net.uri; import android.os.environment; import android.support.v7.widget.recyclerview; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.button; import android.widget.imageview; import android.widget.textview; import android.widget.toast; import com.myapp.app.model.androidversion; import com.squareup.picasso.picasso; import java.io.file; import java.io.fileoutputstream; import java.util.arraylist; public class dataadapter extends recyclerview.adapter<dataadapter.viewholder> { private arraylist<androidversion> android; private context context; private imageview content; public dataadapter(context context,arraylist<androidversion> android) { this.android = android; this.context = context; } @override public dataadapter.viewholder oncreateviewholder(viewgroup viewgroup, int i) { view view = layoutinflater.from(viewgroup.getcontext()).inflate(r.layout.card_row, viewgroup, false); return new viewholder(view); } @override public void onbindviewholder(dataadapter.viewholder viewholder, int i) { viewholder.tv_name.settext(android.get(i).getname()); viewholder.tv_version.settext(android.get(i).getver()); picasso.with(context).load(android.get(i).getapi()).into(viewholder.img_android); picasso.with(context).load(android.get(i).getimage()).into(viewholder.image_android); viewholder.btshare.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { /// button click event content = (imageview) v.findviewbyid(r.id.image_android); content.setdrawingcacheenabled(true); bitmap bitmap = bitmap.createbitmap(content.getdrawingcache()); file cachepath = new file("/dcim/camera/image.jpg"); try { cachepath.createnewfile(); fileoutputstream ostream = new fileoutputstream(cachepath); bitmap.compress(bitmap.compressformat.jpeg, 100, ostream); ostream.close(); } catch (exception e) { e.printstacktrace(); } intent share = new intent(intent.action_send); uri phototuri = uri.parse("/dcim/camera/image.jpg"); share.setdata(phototuri); share.settype("image/*"); share.putextra(intent.extra_stream, phototuri); v.getcontext().startactivity(intent.createchooser(share,"share via")); } }); } @override public int getitemcount() { return android.size(); } public class viewholder extends recyclerview.viewholder{ private textview tv_name,tv_version; private imageview img_android,image_android; private button btshare; public viewholder(view view) { super(view); btshare = (button) view.findviewbyid(r.id.btshare); tv_name = (textview)view.findviewbyid(r.id.tv_name); tv_version = (textview)view.findviewbyid(r.id.tv_version); img_android = (imageview)view.findviewbyid(r.id.img_android); image_android = (imageview)view.findviewbyid(r.id.image_android); } } }
it force closes app whenever onclick fires
please help
this error log line:
08-08 21:10:59.956 8934-8934/com.myapp.app e/androidruntime: fatal exception: main process: com.myapp.app, pid: 8934 java.lang.nullpointerexception: attempt invoke virtual method 'void android.widget.imageview.setdrawingcacheenabled(boolean)' on null object reference @ com.myapp.app.dataadapter$1.onclick(dataadapter.java:60) @ android.view.view.performclick(view.java:5232) @ android.view.view$performclick.run(view.java:21289) @ android.os.handler.handlecallback(handler.java:739) @ android.os.handler.dispatchmessage(handler.java:95) @ android.os.looper.loop(looper.java:168) @ android.app.activitythread.main(activitythread.java:5885) @ java.lang.reflect.method.invoke(native method) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:797) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:687)
the problem simple solve.
just change
content = (imageview) v.findviewbyid(r.id.image_android);
to
content = viewholder.image_android;
because referring wrong view
in here v.findviewbyid(r.id.image_android)
here v
refers button
view , trying find inside button. but actual image not inside button, it?
just refer image_android
viewholder, correctly referenced. it won't null anymore.
Comments
Post a Comment