android - Problems with Picasso and Recyclerview - Images get refreshed on scrolling but in the wrong imageviews -


i working on simple app search tv show, app generates request tmdb. there trying display images , details of results in cardview. using picasso loading images tmdb , works fine. problem when scroll, images loaded first refreshed other imageviews instead of show specific images.

this asynctask code

class jsontask extends asynctask<string,string,string[][]>{     private list<feeditem> persons;     string [][] finalarray = new string[200][3];     @targetapi(build.version_codes.kitkat)     @override     protected string[][] doinbackground(string... params) {         httpurlconnection urlconnection = null;         stringbuffer buffer = new stringbuffer();         string line;         bufferedreader reader = null;         try{             url request1 = new url(params[0]);             urlconnection = (httpurlconnection) request1.openconnection();             urlconnection.setrequestproperty("accept", "application/json");             urlconnection.setrequestmethod("get");             urlconnection.setdoinput(true);             urlconnection.connect();             int responsecode = urlconnection.getresponsecode();             log.d("debug_tag", "the response code is: " + responsecode + " " + urlconnection.getresponsemessage());             inputstream in = urlconnection.getinputstream();             reader = new bufferedreader(new inputstreamreader(in));             while ((line = reader.readline())!=null){                 log.i("check","line is"+line);                 buffer.append(line);             }             string jsonobjectt= buffer.tostring();             jsonobject parentjson = new jsonobject(jsonobjectt);             jsonarray parentarray = (jsonarray) parentjson.get("results");             dataobtained=parentjson.getint("total_results");             for(int = 0; i<parentjson.getint("total_results"); i++){                 jsonobject temp = parentarray.getjsonobject(i);                 finalarray[i][0] = temp.getstring("original_name");                 finalarray[i][1] = temp.getstring("first_air_date");                 finalarray[i][2] = temp.getstring("poster_path");             }         }         catch (malformedurlexception e){             log.i("i do", "eee1");             e.printstacktrace();         } catch (ioexception e) {             log.i("i do", "eee2");             e.printstacktrace();         } catch (jsonexception e) {             e.printstacktrace();         } {             log.i("i do", "eee3");             if(urlconnection!=null)                 urlconnection.disconnect();             try {                 if(reader!=null)                     reader.close();             } catch (ioexception e) {                 log.i("i do", "eee4");                 e.printstacktrace();             }         }         return finalarray;     }      @override     protected void onpostexecute(string[][] result) {         persons = new arraylist<>();         for(int i=0;i<dataobtained;i++){             //if(!result[i][0].isempty()&&result[i][2]!=null)         persons.add(new feeditem(result[i][0], result[i][1],"http://image.tmdb.org/t/p/w500"+result[i][2],searchpagee.this));             }         new thread(new runnable() {             @override             public void run() {              }         }).start();         mrecyclerview.setlayoutmanager(llm);         rvadapter adapter = new rvadapter(persons);         mrecyclerview.setadapter(adapter);     } } } 

and recycleradapter code

public class rvadapter extends recyclerview.adapter<rvadapter.personviewholder>{  list<feeditem> persons;  rvadapter(list<feeditem> persons){     this.persons = persons; } public static class personviewholder extends recyclerview.viewholder {     public static imageview personphoto;     cardview cv;     textview personname;     textview personage;      personviewholder(view itemview) {         super(itemview);         cv = (cardview)itemview.findviewbyid(r.id.cv);         personname = (textview)itemview.findviewbyid(r.id.titlecir);         personage = (textview)itemview.findviewbyid(r.id.contentscir);         personphoto = (imageview)itemview.findviewbyid(r.id.person_photo);     } } @override public personviewholder oncreateviewholder(viewgroup viewgroup, int i) {     view v = layoutinflater.from(viewgroup.getcontext()).inflate(r.layout.cardv, viewgroup, false);     personviewholder pvh = new personviewholder(v);     return pvh; } @override public void onbindviewholder(personviewholder personviewholder, int i) {     personviewholder.personname.settext(persons.get(i).title);     personviewholder.personage.settext(persons.get(i).content);     picasso.with(persons.get(i).context).load(persons.get(i).photoid).placeholder(r.drawable.placeholder).fit().into(personviewholder.personphoto); } @override public int getitemcount() {     return persons == null ? 0 : persons.size(); } 

}

this before scrolling while scrolling. images repeated

add bindview() in personviewholder this,

public static class personviewholder extends recyclerview.viewholder {     public static imageview personphoto;     cardview cv;     textview personname;     textview personage;      personviewholder(view itemview) {         super(itemview);         cv = (cardview)itemview.findviewbyid(r.id.cv);         personname = (textview)itemview.findviewbyid(r.id.titlecir);         personage = (textview)itemview.findviewbyid(r.id.contentscir);         personphoto = (imageview)itemview.findviewbyid(r.id.person_photo);     }      public void bindview(int i) {         personname.settext(persons.get(i).title);         personage.settext(persons.get(i).content);         picasso.with(persons.get(i).context).load(persons.get(i).photoid).placeholder(r.drawable.placeholder).fit().into(personphoto);     } } 

and in bindviewholder need call bindview() bind each element of list appropriate elements.

@override public void onbindviewholder(personviewholder personviewholder, int i) {     try {         personviewholder.bindview(i);     } catch(exception e) {e.printstacktrace();} } 

Comments

Popular posts from this blog

routing - AngularJS State management ->load multiple states in one page -

python - GRASS parser() error -

json - Gson().fromJson(jsonResult, Myobject.class) return values in 0's -