1.模擬服務器
a.新建一個JAVAWEB項目,也就是這裏要充當的服務器,模擬一個業務,並且返回一個XML類型的數據,當然後JSON也行,但是這裏我先使用XML,JSON格式的 後續進行實現。下面圖片是通過訪問服務器返回的XML數據
b.新建一個android項目,訪問服務器,並解析服務器返回的數據
1.新建一個實體類
2.訪問服務器地址,解析數據/** * 實體bean,用來將解析後的數據封裝爲對象 */ public class News { private Integer id; private String title; private Integer timelength; public News(){ } public News(Integer id, String title, Integer timelength) { this.id = id; this.title = title; this.timelength = timelength; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public Integer getTimelength() { return timelength; } public void setTimelength(Integer timelength) { this.timelength = timelength; } }
3.將數據顯示在ListView中,至於ListView顯示數據這裏不在進行介紹,請訪問我之前發表的博文ListView綁定數據import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import android.util.Xml; import cn.kafei.bean.News; public class NewsService { /** * 獲取最新視頻資訊 */ public static List<News> getListNews() throws Exception { // 服務器地址URL,在操作系統上測試訪問項目時使用localhost(127.0.0.1)進行訪問,但在這裏需要將localhost(127.0.0.1)替換爲 // 本機在局域網或者外網中的IP地址。因爲android和WEB項目運行在不同的平臺上 String path = "http://192.168.1.109:8080/ListServlet"; URL url = new URL(path);// 構建一個URL對象 HttpURLConnection con = (HttpURLConnection) url.openConnection();// 打開連接 con.setConnectTimeout(5000);// 設置超時時間 con.setRequestMethod("GET");// 設置請求方式 if (con.getResponseCode() == 200) {// 判斷是否請求成功,狀態碼爲200 InputStream inStream = con.getInputStream(); return parseXML(inStream); } return null; } /** * 解析服務器返回的XML數據 * * @param inStream */ private static List<News> parseXML(InputStream inStream) throws Exception { List<News> newList = new ArrayList<News>(); News news = null; XmlPullParser parser = Xml.newPullParser(); parser.setInput(inStream, "UTF-8"); int event = parser.getEventType(); while (event != XmlPullParser.END_DOCUMENT) { switch (event) { case XmlPullParser.START_TAG: if ("news".equals(parser.getName())) { int id = new Integer(parser.getAttributeValue(0)); news = new News(); news.setId(id); } else if ("title".equals(parser.getName())) { news.setTitle(parser.nextText()); } else if ("timelength".equals(parser.getName())) { news.setTimelength(new Integer(parser.nextText())); } break; case XmlPullParser.END_TAG: if ("news".equals(parser.getName())) { newList.add(news); news = null; } break; } event = parser.next(); } return newList; } }
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import cn.kafei.bean.News; import cn.kafei.service.NewsService; import android.app.Activity; import android.os.Bundle; import android.widget.ListView; import android.widget.SimpleAdapter; public class NewsActivity extends Activity { private ListView listView = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); listView = (ListView) this.findViewById(R.id.listView);// listView顯示控件 try { List<News> news = NewsService.getListNews();// 獲取服務器請求返回的數據信息 List<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>(); for (News n : news) { HashMap<String, Object> item = new HashMap<String, Object>(); item.put("id", n.getId()); item.put("title", n.getTitle()); item.put( "timelength", getResources().getString(R.string.timeLength) + n.getTimelength() + getResources().getString(R.string.min)); data.add(item); } SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item, new String[] { "title", "timelength" }, new int[] { R.id.title, R.id.timelength }); listView.setAdapter(adapter);// 將SimpleAdapter適配器將數據綁定在ListView上 } catch (Exception e) { e.printStackTrace(); } } }
4.解析JSON的方法
服務端組件JSON字符串:/** * 獲取服務器端JSON格式數據 */ public static List<News> getListNewsJson() throws Exception { // 服務器地址URL,在操作系統上測試訪問項目時使用localhost(127.0.0.1)進行訪問,但在這裏需要將localhost(127.0.0.1)替換爲 // 本機在局域網或者外網中的IP地址。因爲android和WEB項目運行在不同的平臺上 String path = "http://192.168.1.109:8080/ListServlet?format=json"; URL url = new URL(path);// 構建一個URL對象 HttpURLConnection con = (HttpURLConnection) url.openConnection();// 打開連接 con.setConnectTimeout(5000);// 設置超時時間 con.setRequestMethod("GET");// 設置請求方式 if (con.getResponseCode() == 200) {// 判斷是否請求成功,狀態碼爲200 InputStream inStream = con.getInputStream(); return parseJSON(inStream); } return null; } /** * 解析JSON數據 * @param inStream * @return * @throws IOException */ private static List<News> parseJSON(InputStream inStream) throws Exception { List<News> newsList=new ArrayList<News>(); byte[] data=read(inStream); String json=new String(data); JSONArray array=new JSONArray(json); for (int i=0;i<array.length();i++) { JSONObject jsonObject=array.getJSONObject(i); News news=new News(jsonObject.getInt("id"), jsonObject.getString("title"), jsonObject.getInt("timelength")); newsList.add(news); } return newsList; } /** * 讀取流中的數據 */ public static byte[] read(InputStream inputStream) throws IOException { ByteArrayOutputStream outputStream=new ByteArrayOutputStream(); byte[] b=new byte[1024]; int len=0; while((len=inputStream.read(b))!=-1){ outputStream.write(b); } inputStream.close(); return outputStream.toByteArray(); }
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List<News> news=service.getListNews(); String format=request.getParameter("format"); if("json".equals(format)){ StringBuilder builder=new StringBuilder(); builder.append('['); for(News n:news){ builder.append('{'); builder.append("id:").append(n.getId()).append(','); builder.append("title:\"").append(n.getTitle()).append("\","); builder.append("timelength:").append(n.getTimelength()); builder.append("},"); } builder.deleteCharAt(builder.length()-1); builder.append(']'); //將新聞放到request對象中 request.setAttribute("json", builder.toString()); request.getRequestDispatcher("/WEB-INF/page/newsjson.jsp").forward(request, response); }else{ //將新聞放到request對象中 request.setAttribute("news", news); //用轉發將數據顯示的頁面上 request.getRequestDispatcher("/WEB-INF/page/news.jsp").forward(request, response); } }
5.顯示效果
源碼下載地址:android訪問網絡源碼