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.