Android之ListView访问网络数据
来源:互联网 发布:ab plc编程语言 编辑:程序博客网 时间:2024/05/16 06:37
一、服务器端
①在eclipse中创建Web->Dynamic web Project 工程名命为Web_ListView_Json。
②创建CityAction.java类(Servlet类)。此时会出错,原因是servlet-api.jar没有导入工程中,步骤如下:
工程名右键->Properties->Java Build Path->Libraries->Add External JARS->找到Apache-tomcat-7.0.34文件中lib文件夹下的servlet-api.jar(D:\java2EE\apache-tomcat-7.0.34\lib\servlet-api.jar)选中->打开->ok
package com.city.action;import java.io.IOException;import java.io.PrintWriter;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import net.sf.json.JSONSerializer;/** * Servlet implementation class CityAction */@WebServlet("/CityAction")public class CityAction extends HttpServlet {private static final long serialVersionUID = 1L; /** * Default constructor. */ public CityAction() { // TODO Auto-generated constructor stub }/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubthis.doPost(request, response);}/** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubresponse.setContentType("text/html;charset=utf-8");response.setCharacterEncoding("utf-8");request.setCharacterEncoding("utf-8");PrintWriter writer=response.getWriter();String type=request.getParameter("type");if(type.equals("json")){List<String> list=CityDataSource.getCitysList();//生成json对象,json数据一定要带<K,V>Map<String, List<String>>map=new HashMap<String, List<String>>();map.put("citys", list);String jsonString=JSONSerializer.toJSON(map).toString();writer.println(jsonString);//注意生成json字符串时,这个地方一定要是独立干净的}writer.flush();writer.close();}}③提供简单的数据源:声明一个类CityDataSource.java
package com.city.action;import java.util.ArrayList;import java.util.List;public class CityDataSource {public CityDataSource() {// TODO Auto-generated constructor stub}/** * 提供数据源 * @return */public static List<String> getCitysList(){List<String> list=new ArrayList<String>();for(int i=0;i<25;i++){list.add("北京"+i);}//为了增强滑动效果,用for增加数据集合return list;}}测试:
在地址栏输入http://192.168.1.102:8080/Web_ListView_Json/CityAction?type=json效果图如下
二、手机客户端
把数据提交到列表信息上
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.android_listview.MainActivity" > <ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" > </ListView></RelativeLayout>一定要记得在AndroidManifest.xml中加网络访问权限
<uses-permission android:name="android.permission.INTERNET"/>①新建包com.example.android_listview_web.http中创建工具类HttpUtils.java取得json数据
package com.example.android_listview_web.http;import org.apache.http.HttpResponse;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpPost;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.util.EntityUtils;public class HttpUtils {public HttpUtils() {// TODO Auto-generated constructor stub}/** * * @param path 获取指定路径的json信息 * @param encoding 指定编码格式 * @return */public static String sendPostMethod(String path,String encoding){String result="";HttpClient httpClient=new DefaultHttpClient();try {HttpPost post=new HttpPost(path);HttpResponse response=httpClient.execute(post);if(response.getStatusLine().getStatusCode()==200){result=EntityUtils.toString(response.getEntity(), encoding);}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}finally{httpClient.getConnectionManager().shutdown();//关闭连接}return result;}}②新建包com.example.android_asynctask_json.json中创建工具类JsonTools.java对json数据进行解析
package com.example.android_listview_web.json;import java.util.ArrayList;import java.util.List;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;public class JsonTools {public JsonTools() {// TODO Auto-generated constructor stub}/** * * @param jsonString * @return */public static List<String> parseList(String jsonString){List<String> list=new ArrayList<String>();try {JSONObject jsonObject=new JSONObject(jsonString);//得到 {"citys":["北京1","北京2"..."北京23","北京24"]} 这个大对象JSONArray jsonArray=jsonObject.getJSONArray("citys");for(int i=0;i<jsonArray.length();i++){list.add(jsonArray.getString(i));}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return list;}}③在MainActivity.java中
package com.example.android_listview_web;import java.util.List;import com.example.android_listview_web.http.HttpUtils;import com.example.android_listview_web.json.JsonTools;import android.support.v7.app.ActionBarActivity;import android.app.ProgressDialog;import android.os.AsyncTask;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.widget.ArrayAdapter;import android.widget.ListView;public class MainActivity extends ActionBarActivity {private ListView listView;private ArrayAdapter<String> adapter;private ProgressDialog dialog;private final String CITY_PATH="http://192.168.1.102:8080/Web_ListView_Json/CityAction?type=json";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dialog=new ProgressDialog(MainActivity.this);dialog.setTitle("提示");dialog.setMessage("loading...");listView=(ListView) this.findViewById(R.id.listView1);new MyTask().execute(CITY_PATH);}class MyTask extends AsyncTask<String, Void, List<String>>{@Overrideprotected void onPreExecute() {// TODO Auto-generated method stubsuper.onPreExecute();dialog.show();}@Overrideprotected List<String> doInBackground(String... params) {// TODO Auto-generated method stubString jsonString=HttpUtils.sendPostMethod(params[0], "utf-8");List<String> list=JsonTools.parseList(jsonString);return list;}@Overrideprotected void onPostExecute(List<String> result) {// TODO Auto-generated method stubsuper.onPostExecute(result);adapter=new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_expandable_list_item_1, result);listView.setAdapter(adapter);adapter.notifyDataSetChanged();//一旦适配器有数据,直接通知listView更新dialog.dismiss();}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();if (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}}运行效果图
1 0
- Android之ListView访问网络数据
- Android 网络数据访问
- android访问网络数据
- Android之网络访问
- android之访问网络获取网页数据并存入数据库
- Android学习之网络请求(访问网路数据)一
- Android访问网络:服务端返回XML或JSON格式数据,Android 进行解析并使用ListView显示
- Android之URL访问网络
- Android 开发之访问网络
- 基础Android之访问网络
- Android 之 HttpURLConnection 访问网络
- Android+Listview+分页+动态加载网络数据
- Android+Listview+分页+动态加载网络数据
- Android ListView加载网络数据和图片
- Android异步加载学习笔记之二:实现ListView中的图片数据从网络加载
- 网络访问之json数据解析
- android HttpClient访问网络获取数据
- Android之ListView分页获取网路数据客户端实现(开启异步任务,获取网络数据)(三)
- 关于API接口
- 算法时间复杂度分析表
- Linux服务器 挂载数据盘
- javascript深入理解js闭包
- spring aop execution表达式
- Android之ListView访问网络数据
- JQuery 常用小技巧
- Spring容器事件
- 备忘:通过screen record打通Android从app layer到native layer的通道
- 【JEECG技术博文】online自定义模板的使用
- Python IDE
- Redis与Memcached的区别
- android listview 实现从数据库读取已读功能,服务器通知增加,刷新listview
- Linux的capability深入分析