android listview 网络数据,Android之ListView访问网络数据

一、服务器端

①在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 stub

this.doPost(request, response);

}

/**

* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

*/

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

response.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 list=CityDataSource.getCitysList();//生成json对象,json数据一定要带

Map>map=new HashMap>();

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 getCitysList(){

List list=new ArrayList();

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效果图如下

3967455fc070e9c9ab92e284c8b2ddbc.png

二、手机客户端

把数据提交到列表信息上

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" >

android:id="@+id/listView1"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_alignParentLeft="true"

android:layout_alignParentTop="true"

>

一定要记得在AndroidManifest.xml中加网络访问权限

①新建包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 exception

e.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 parseList(String jsonString){

List list=new ArrayList();

try {

JSONObject jsonObject=new JSONObject(jsonString);//得到 {"citys":["北京1","北京2"..."北京23","北京24"]} 这个大对象

JSONArray jsonArray=jsonObject.getJSONArray("citys");

for(int i=0;i

list.add(jsonArray.getString(i));

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.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 adapter;

private ProgressDialog dialog;

private final String CITY_PATH="http://192.168.1.102:8080/Web_ListView_Json/CityAction?type=json";

@Override

protected 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>{

@Override

protected void onPreExecute() {

// TODO Auto-generated method stub

super.onPreExecute();

dialog.show();

}

@Override

protected List doInBackground(String... params) {

// TODO Auto-generated method stub

String jsonString=HttpUtils.sendPostMethod(params[0], "utf-8");

List list=JsonTools.parseList(jsonString);

return list;

}

@Override

protected void onPostExecute(List result) {

// TODO Auto-generated method stub

super.onPostExecute(result);

adapter=new ArrayAdapter(MainActivity.this, android.R.layout.simple_expandable_list_item_1, result);

listView.setAdapter(adapter);

adapter.notifyDataSetChanged();//一旦适配器有数据,直接通知listView更新

dialog.dismiss();

}

}

@Override

public 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;

}

@Override

public 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);

}

}运行效果图

fc4b9b8af5068e76c713576e966a16fb.png

0f16052bc7b9b4416e67f36b166e23e0.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值