Android Program Development listview+json+ Asynchronous network Picture loading + scrolling Page example (picture can be cached, pictures good chaos) _android

Source: Internet
Author: User
Tags static class

Gson for parsing JSON in the example please Google download

Main activity:

Package COM.
Example.main;
Import Java.util.HashMap;
Import Java.util.Iterator;
Import java.util.LinkedList;
Import java.util.List;
Import Java.util.Map; Import COM.
EXAMPLE.MAIN.R; Import COM.
Example.Main.stringGetJson.User;
Import android.app.Activity;
Import android.app.ListActivity;
Import Android.os.AsyncTask;
Import Android.os.Bundle;
Import android.view.Gravity;
Import Android.view.LayoutInflater;
Import Android.view.View;
Import Android.view.ViewGroup;
Import Android.widget.AbsListView;
Import Android.widget.AbsListView.OnScrollListener;
Import Android.widget.ArrayAdapter;
Import Android.widget.ImageView;
Import Android.widget.LinearLayout;
Import Android.widget.ListView;
Import Android.widget.ProgressBar;
Import Android.widget.TextView;  public class Stringlistactivity extends Listactivity {private myadapter mmyadapter; private linkedlist<user> users
= NULL;
The ListView ListView ListView = NULL in the current activity;
int lastitem = 0;
LinearLayout loadinglayout = null; @Override PUBlic void OnCreate (Bundle savedinstancestate) {super.oncreate (savedinstancestate); Setcontentview (
r.layout.foodlistactivity);
ListView = Getlistview ();
Setloadinglayout ();
New Readtask (). Execute (NULL); Private Final class Myadapter extends arrayadapter<user> {public myadapter (activity activity, list<user> NE
Wslist) {Super (activity, 0, newslist);} private Map<integer, view> viewmap = new Hashmap<integer, view> ();
@Override public View getview (int position, View Convertview, ViewGroup parent) {Viewholder holder;
View Rowview = this.viewMap.get (position);
if (Rowview = = null) {User user = Users.get (position);
Layoutinflater Inflater = (activity) this.getcontext ()). Getlayoutinflater ();
Holder = new Viewholder ();
Rowview = Inflater. Inflate (R.layout.foodlistactivity_item, NULL);
Holder.mnametext = (TextView) rowview. Findviewbyid (R.id.fooditemusername);
Holder.mphoto = (ImageView) rowview. Findviewbyid (R.id.fooditempic);
Rowview.settag (holder); Holder.mnameText.settext (user.
Name); if (!holder.mphoto.isdrawingcacheenabled ()) {holder.mPhoto.setTag (user).
PIC);
New Downimagetask (). Execute (Holder.mphoto);
Holder.mPhoto.setDrawingCacheEnabled (TRUE);
} viewmap.put (position, rowview);
else {holder = (Viewholder) Rowview.gettag ();} return rowview;
public class Viewholder {public TextView mnametext; public ImageView Mphoto;}} public void Setloadinglayout () {linearlayout layout = new LinearLayout (this); Layout.setorientation (
Linearlayout.horizontal); ProgressBar ProgressBar = new ProgressBar (this); Progressbar.setpadding (0, 0, 15, 0); Layout.addview (ProgressBar); TextView TextView = new TextView (this); Textview.settext ("Load ..."); Textview.setgravity (gravity.center_vertical); Layout.addview (TextView); Layout.setgravity (Gravity.center); Loadinglayout = new LinearLayout (this); Loadinglayout.addview (layout); Loadinglayout.setgravity (Gravity.center); Private class Scrolllistener implements Onscrolllistener {@Override public void onscroll (AbSlistview view, int firstvisibleitem, int visibleitemcount, int totalitemcount) {//when there is no data in ListView, or more than 100 data, Or is not a 10 integer multiple (that is, insufficient data) to hide "more" and cancel the Onscroll event binding if (Mmyadapter.getcount () >= | | | mmyadapter.getcount ()% > 0 | | mmyad Apter.getcount () = = 0) {Listview.removefooterview (loadinglayout); Listview.setonscrolllistener (null);} LastItem = Firstvisibleitem + visibleitemcount-1;//here minus one is because there are footview} @Override public void onscrollstatechanged (Abslistview view  , int scrollstate) {if (LastItem = = Mmyadapter.getcount () && scrollstate = = Onscrolllistener.scroll_state_idle) { Make the paging Operation New Scrolltask (). Execute (NULL); }} public class Readtask extends Asynctask<object, void, void> {@Override protected void Doinbackground (Object. . ARG0) {users = new Stringgetjson (). Getjson (); return null;} @Override protected void onpostexecute (void result) {LISTVI Ew.addfooterview (loadinglayout); Mmyadapter = new Myadapter (stringlistactivity.this, users); Setlistadapter (Mmyadapter); Listview.setonscrolllistener (New Scrolllistener ()); } public class Scrolltask extends Asynctask<object, void, void> {@Override protected void Doinbackground (Object. . arg0) {for (iterator iterator = new Stringgetjson (). Getjson (). iterator (); Iterator.hasnext ();) {User user = (user) iterator.next (); Users.add (user);} return null; } @Override protected void onpostexecute (void result) {mmyadapter.notifydatasetchanged ();}} }

JSON data source (in this example, the JSON string is written directly in the code, the actual project needs to be read from the network, the example has used multithreading):

Package COM.
Example.main;
Import Java.lang.reflect.Type;
Import Java.util.Iterator;
Import java.util.LinkedList;
Import Android.database.MatrixCursor;
Import Android.widget.ListView;
Import Android.widget.TextView;
Import Com.google.gson.Gson;
Import Com.google.gson.reflect.TypeToken; public class Stringgetjson {//Set temporary ID, in the project will be the real ID replace private int id = 0; public Stringgetjson () {super ();}//Through the Getjson method Gets the list of User from the JSON string public linkedlist<user> Getjson () {String jsondata = "[{\ name\": \ "xinuxforjson1\", \ "pic\": \ " Yun_qi_img/f.gif\ "},{\" name\ ": \ xinuxforjson2\", "pic\": \ "yun_qi_img/f.gif\"},{\ "name\": \ "xinuxforjson3\", \ " Pic\ ": \ yun_qi_img/f.gif\"},{\ "name\": \ "xinuxforjson4\", \ "pic\": \ "http://sucai.qqjay.com/fengmian/201104/ Tupian1/8.jpg\ "},{\" name\ ": \" Xinuxforjson5\ "," pic\ ": \" Http://sucai.qqjay.com/fengmian/201104/tupian1/10.jpg\ " },{\ "name\": \ "xinuxforjson6\", \ "pic\": \ "http://sucai.qqjay.com/fengmian/201104/tupian1/7.jpg\"},{\ "Name\": \ " Xinuxforjson7\ ", \" pic\ ": \" Http://sucai.qqjAy.com/fengmian/201104/tupian1/11.jpg\ "},{\" "name\": \ "xinuxforjson8\", \ "pic\": \ "Http://sucai.qqjay.com/fengmian /201104/tupian1/12.jpg\ "},{\" "name\": \ "xinuxforjson9\", \ "pic\": \ "Http://sucai.qqjay.com/fengmian/201104/tupian1
/9.jpg\ "},{\" "name\": \ "xinuxforjson10\", \ "pic\": \ "http://sucai.qqjay.com/fengmian/201104/tupian/7.jpg\"}] ";
Type ListType = new typetoken<linkedlist<user>> () {}.gettype ();
Gson Gson = new Gson ();
linkedlist<user> users = Gson.fromjson (Jsondata, ListType);
return to users; ///Provides data entity class final static class User {public string Name, public string Pic for Getjson}}

Picture Download Asynctask

Package COM. Example.main;
Import COM. Example.FunctionUtility.Download;
Import Android.graphics.Bitmap;
Import Android.os.AsyncTask;
Import Android.widget.ImageView;
public class Downimagetask extends Asynctask<imageview, Void, bitmap> {
ImageView gview = null;
@Override
protected Bitmap doinbackground (ImageView ... arg0) {
Gview = (ImageView) arg0[0];
Return Download.getbitmapfromurl (Gview.gettag (). toString ());
@Override
protected void OnPostExecute (Bitmap result) {
if (result!= null) {
This.gView.setImageBitmap (result);
}
This.gview = null;
}
}

Network Picture Download class:

Package COM. example.functionutility;
Import Java.io.BufferedInputStream;
Import java.io.IOException;
Import Java.io.InputStream;
Import java.net.MalformedURLException;
Import Java.net.URL;
Import Android.graphics.Bitmap;
Import android.graphics.BitmapFactory;
public class Download {public
static Bitmap Getbitmapfromurl (String imgurl) {
URL url;
Bitmap Bitmap = null;
try {
url = new URL (imgurl);
InputStream is = Url.openconnection (). getInputStream ();
Bufferedinputstream bis = new Bufferedinputstream (is);
Bitmap = Bitmapfactory.decodestream (bis);
Bis.close ();
} catch (Malformedurlexception e) {
e.printstacktrace ();
} catch (IOException e) {
e.printstacktrace (); c22/>} return
bitmap
}
}

The above is a small set for everyone to share the Android program development listview+json+ Asynchronous Network image loading + scrolling examples (Pictures can be cached, pictures good disorder) of the relevant knowledge, I hope to help.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.