android - Sharing an image from RecyclerView -


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