`

客户端访问服务器批量显示数据

 
阅读更多

批量获取服务器的信息,显示在本地  不向服务器发信息直接获取

定义一个类,访问服务器并显示在这个页面显示在一个简单的ListView里面

访问服务器的类

定义初始化

//显示信息的ListView	
private ListView lv_leave;
//填充访问服务器类的Adapter	
LeaveInfoAdapter lva;
ArrayList<LeaveInfo> list = new ArrayList<LeaveInfo>();

 

在onCreate方法里面开始访问

                setContentView(R.layout.leave_show);
		lv_leave = (ListView) findViewById(R.id.leave_show_list);

		try {
			 
                       //将访问服务器获取到的值都保存在list里面
			list = JSONUtil.postRequest("http://172.16.10.131:8080/workflow/workapprove!phoneFindStatus02.action");

              //然后将这个list传给填充访问服务器类的Adapter
			lva = new LeaveInfoAdapter(list, this);

//将Adapter赋值给ListView
        	         lv_leave.setAdapter(lva);
			 
		} catch (Exception e) {
			System.out.println("网络异常");
			e.printStackTrace();
		}

 

JsonUtil解析将获取到的值保存在一个list里面并传到访问服务器类里面定义的list里面

 

public class JSONUtil {
	private static final String TAG = "JSONUtil";

	/**
	 * 获取json内容
	 * 
	 * @param url
	 * @return JSONArray
	 * @throws JSONException
	 * @throws ConnectionException
	 */
	public static JSONObject getJSON(String url) throws JSONException,
			Exception {

		return new JSONObject(getRequest(url));
	}

	/**
	 * 向api发送get请求,返回从后台取得的信息。
	 * 
	 * @param url
	 * @return String
	 */
	protected static String getRequest(String url) throws Exception {
		return getRequest(url, new DefaultHttpClient(new BasicHttpParams()));
	}

	protected static ArrayList<LeaveInfo> postRequest(String url)
			throws Exception {
		return postRequest(url, new DefaultHttpClient());
	}

	/**
	 * 向api发送get请求,返回从后台取得的信息。
	 * 
	 * @param url
	 * @param client
	 * @return String
	 */
	protected static String getRequest(String url, DefaultHttpClient client)
			throws Exception {
		String result = null;
		int statusCode = 0;
		HttpGet getMethod = new HttpGet(url);
		Log.d(TAG, "do the getRequest,url=" + url + "");
		try {
			// getMethod.setHeader("User-Agent", USER_AGENT);
			HttpResponse httpResponse = client.execute(getMethod);
			 statusCode = httpResponse.getStatusLine().getStatusCode();
			Log.d(TAG, "statuscode = " + statusCode);
		 
			result = retrieveInputStream(httpResponse.getEntity());
			 
		} catch (Exception e) {
			Log.e(TAG, e.getMessage());
			throw new Exception(e);
		} finally {
			getMethod.abort();
		}
		return result;
	}

	protected static ArrayList<LeaveInfo> postRequest(String url,
			DefaultHttpClient client) throws Exception {
		String result = null;
		int statusCode = 0;
		 ArrayList<LeaveInfo> list = new ArrayList<LeaveInfo>();
		HttpPost getMethod = new HttpPost(url);
		Log.d(TAG, "do the postRequest,url=" + url + "");
		try {
			// getMethod.setHeader("User-Agent", USER_AGENT);
			HttpResponse httpResponse = client.execute(getMethod);
			// statusCode == 200 正常
			statusCode = httpResponse.getStatusLine().getStatusCode();
			Log.d(TAG, "statuscode = " + statusCode);
			// 处理返回的httpResponse信息
			if (statusCode == 200) {

				HttpEntity entity = httpResponse.getEntity();
				result = retrieveInputStream(entity);
				
				 
				JSONArray jsonArray = new JSONArray(result );
				System.out.println(jsonArray);
				for (int i = 0, size = jsonArray.length(); i < size; i++) {
					LeaveInfo bean = new LeaveInfo();
					JSONObject jsonObject = jsonArray.getJSONObject(i);

					bean.setId(jsonObject.getInt("id"));
					bean.setApplyname(jsonObject.getString("applyname"));
					bean.setApplytime(jsonObject.getString("applytime"));
					bean.setReason(jsonObject.getString("reason"));
					bean.setStatus(jsonObject.getString("status"));
					list.add(bean);
				}
				 
				
			}

		} catch (Exception e) {
			// Log.e(TAG, e.getMessage());
			throw new Exception(e);
		} finally {
			// getMethod.abort();
		}
		return list;
	}

	/**
	 * 处理httpResponse信息,返回String
	 * 
	 * @param httpEntity
	 * @return String
	 */
	protected static String retrieveInputStream(HttpEntity httpEntity) {

		int length = (int) httpEntity.getContentLength();
		// the number of bytes of the content, or a negative number if unknown.
		// If the content length is known but exceeds Long.MAX_VALUE, a negative
		// number is returned.
		// length==-1,下面这句报错,println needs a message
		if (length < 0)
			length = 10000;
		StringBuffer stringBuffer = new StringBuffer(length);
		try {
			InputStreamReader inputStreamReader = new InputStreamReader(
					httpEntity.getContent(), "UTF-8");
			char buffer[] = new char[length];
			int count;
			while ((count = inputStreamReader.read(buffer, 0, length - 1)) > 0) {
				stringBuffer.append(buffer, 0, count);
			}
		} catch (UnsupportedEncodingException e) {
			Log.e(TAG, e.getMessage());
		} catch (IllegalStateException e) {
			Log.e(TAG, e.getMessage());
		} catch (IOException e) {
			Log.e(TAG, e.getMessage());
		}
		System.out.println("resulte:" + stringBuffer.toString());
		return stringBuffer.toString();
	}

}

 填充访问服务器类的Adapter

 

public class LeaveInfoAdapter extends BaseAdapter {
	List<LeaveInfo>  list;
	Context mcontext;

	public LeaveInfoAdapter(List<LeaveInfo> list, Context context) {

		this. list = list;
		this.mcontext = context;
	}

	public void setResult(List<LeaveInfo> list, Context context) {
		this. list = list;
		this.mcontext = context;
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return list.size();
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return  list.get(position);
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		if (convertView == null) {
			LayoutInflater inflater = LayoutInflater.from(mcontext);
			convertView = inflater.inflate(R.layout.leave, null);
		}
		TextView tv_name = (TextView) convertView.findViewById(R.id.leave_name);
		tv_name.setText( "姓名:"+list.get(position).getApplyname());
		TextView tv_time = (TextView) convertView.findViewById(R.id.leave_time);
		tv_time.setText("请假时间"+ list.get(position).getApplytime());
		TextView tv_reason = (TextView) convertView
				.findViewById(R.id.leave_reason);
		tv_reason.setText( "请假原因"+list.get(position).getReason());
		TextView tv_status = (TextView) convertView
				.findViewById(R.id.leave_status);
		tv_status.setText( "状态:"+list.get(position).getStatus());

		return convertView;
	}

}

 

LeaveInfo 实体对象

 

public class LeaveInfo {

private int id ;
private String applyname  ;
private String applytime  ;
private String reason ;
private String status  ;
然后是Getters跟Setters方法
有参构造方法跟无参构造方法

}

 然后就是定义一个leave_show.xml

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
    
<ListView 
    android:id="@+id/leave_show_list"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"></ListView>
</LinearLayout>

 

定义一个填充Adapter的XMl        leave.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
 
    <TextView
        android:id="@+id/leave_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         />

    <TextView
        android:id="@+id/leave_time"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

    <TextView
        android:id="@+id/leave_reason"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
          />

    <TextView
        android:id="@+id/leave_status"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         />
 
</LinearLayout>

 

以上代码就是android客户端直接访问服务器获取数据并显示在本地的ListView的实例

分享到:
评论

相关推荐

    C#基于OPC服务器读写欧姆龙PLC数据实例源码

    【工控老马出品,必属精品,质量保证,亲测能用】 资源名:C#基于OPC服务器...源码说明: 本资源详细介绍了用C#编写客户端程序连接OPC服务器,从而实现上位机与PLC的数据通讯。 适合人群:新手及有一定经验的开发人员

    基于SwfUpload插件的文件批量上传插件GooUploader

    基于上一点,本控件前台也不会以长轮询方式访问服务器端,以获取文件上传进度情况,而是自己定时计算以上传的字节总数。因此当上传一个文件时,FLASH插件只会发一次传输请求,这样就改善了效率。 由于用FLASH传值...

    捍卫者网络准入控制 v5.6.5.zip

    认证数据存在客户端和认真服务器,进行实时同步更新; 非法客户端连接合法终端,系统会进行审核,发现不在白名单中或列入黑名单,进行屏蔽,并记录访问日志,从而达到事前控制, 事后审计的管理要求。 捍卫者网络...

    windows、linux下sqlite远程管理工具及服务器

    而且可以远程运行SQL语句,直接通过点击数据表格对数据库记录进行更新包括增加新记录、删除、修改,可以上传下载二进制文件到数据库,可批量导入TXT文件到数据库,可以查看索引,支持多数据库同时操作。 功能还在...

    华为服务器日常维护及故障处理文档.pdf

    1.1 维护准备-软件工具 服务器日常维护软件工具一览表(按需提前准备) 名称 说明 Putty/Winscp 开源工具,用于Windows客户端命令行方式访问Linux系统以及文件传输。 Toolkit Tools 主要功能:获取硬件信息;快速...

    服务器搬迁及软硬件升级方案.docx

    采用标准化的接口协议,支持运行在任何标准IP网络上的应用程序和客户端连接,具备大规模高并发请求响应能力,具备节点级数据保护和容灾能力,具有横向扩展能力,通过内建的集中式备份功能实现数据快照、增量备份和...

    HBase权威指南

    使用本地Java客户端,或者通过提供了REST、Avro和Thrift应用编程接口的网关服务器来访问HBase;让你了解HBase架构的细节,包括存储格式、预写日志、后台进程等等;在HBase中集成用于海量并行数据处理任务的Hadoop的...

    hbase权威指南

    使用本地Java客户端,或者通过提供了REST、Avro和Thrift应用编程接口的网关服务器来访问HBase;让你了解HBase架构的细节,包括存储格式、预写日志、后台进程等等;在HBase中集成用于海量并行数据处理任务的Hadoop的...

    RedisDesktopManager 2020.7

    redis windows 客户端最新版 RDM为您提供了一个易于使用的 GUI,可以访问您的 Redis 数据库并执行一些基本操作: ...从 RDB 文件中导入数据 - 您可以轻松地将大型 rdb 文件中的数据分到多个较小的 redis 服务器上

    RedisDesktopManager 2020.5

    redis windows 客户端最新版 RDM为您提供了一个易于使用的 GUI,可以访问您的 Redis 数据库并执行一些基本操作: ...从 RDB 文件中导入数据 - 您可以轻松地将大型 rdb 文件中的数据分到多个较小的 redis 服务器上

    HBase权威指南中文版

    使用本地Java客户端,或者通过提供了REST、Avro和Thrift应用编程接口的网关服务器来访问HBase;让你了解HBase架构的细节,包括存储格式、预写日志、后台进程等等;在HBase中集成用于海量并行数据处理任务的Hadoop的...

    Linux应用软件服务篇-五剑客

    第二章节讲解企业级NTP时间服务器对公司内网所有客户机及服务器批量实现时间同步,多个节点如何去快速同步主服务器时间。? 第三章节讲解NFS服务器实现与客户机磁盘文件的共享,通过网络让不同的机器、不同的操作...

    HBASE指南中文

    使用本地Java客户端,或者通过提供了REST、Avro和Thrift应用编程接口的网关服务器来访问HBase;了解HBase架构的细节,包括存储格式、预写日志、后台进程等;在HBase中集成MapReduce框架;了解如何调节集群、设计模式...

    基于RDMA的内存数据库系统

    基于RDMA和HTM的内存数据库系统,在RDMA传输中,SEND/RECEIVE是双边操作,即需要通信双方的参与,并且RECEIVE要先于SEND执行,这样对方才能发送数据,当然如果对方不需要发送数据,可以...单边操作多用于批量数据传输。

    hbase权威指南中文版

    使用本地Java客户端,或者通过提供了REST、Avro和Thrift应用编程接口的网关服务器来访问HBase;了解HBase架构的细节,包括存储格式、预写日志、后台进程等;在HBase中集成MapReduce框架;了解如何调节集群、设计模式...

    rdm-2020.6.0.0

    RDM为您提供了一个易于使用的 GUI,可以访问您的 Redis 数据库并执行一些基本操作: 将键视为树 CRUD 键 在树状视图中分析整个 DB 或选定的命名空间的内存使用情况(需要 redis 服务器 &gt;= 4.0 列出已连接的客户端、...

Global site tag (gtag.js) - Google Analytics