1.Pull解析:

package com.zknu.xmlpull;import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import com.zknu.entity.Facility;
import android.content.Context;
import android.util.Xml;/*** 作用:解析XML文档* * */
public class XmlPull {/*** 得到父元素* * * */static List<String> parents = null;static String parent = null;public static List<String> getParents(Context context, InputStream is)throws Exception {XmlPullParser parser = Xml.newPullParser();parser.setInput(is, "utf-8");int eventType = parser.getEventType();while (eventType != XmlPullParser.END_DOCUMENT) {switch (eventType) {case XmlPullParser.START_DOCUMENT:parents = new ArrayList<String>();break;case XmlPullParser.START_TAG:String name = parser.getName();if (name.equals("facilityType")) {parent = parser.getAttributeValue(0);}break;case XmlPullParser.TEXT:break;case XmlPullParser.END_TAG:if (parent != null) {parents.add(parent);}parent = null;break;default:break;}eventType = parser.next();}return parents;}/*** 得到子元素* * * * */public static List<List<Facility>> getChildren(Context context, InputStream is)throws Exception {List<List<Facility>> children = new ArrayList<List<Facility>>();List<Facility> child = null;Facility facility = null;XmlPullParser parser = Xml.newPullParser();parser.setInput(is, "utf-8");int eventType = parser.getEventType();while (eventType != XmlPullParser.END_DOCUMENT) {switch (eventType) {case XmlPullParser.START_DOCUMENT:child = new ArrayList<Facility>();break;case XmlPullParser.START_TAG:String name = parser.getName();if (name.equals("facilityType")) {child = new ArrayList<Facility>();}if (name.equals("facility")) {facility = new Facility();} else if (name.equals("id")) {facility.setId(Integer.parseInt(parser.nextText()));} else if (name.equals("name")) {facility.setName(parser.nextText());} else if (name.equals("state")) {facility.setState(Integer.parseInt(parser.nextText()));}break;case XmlPullParser.TEXT:break;case XmlPullParser.END_TAG:String endname = parser.getName();if (endname.equals("facility")) {child.add(facility);facility = null;}if (endname.equals("facilityType")) {children.add(child);child = null;}break;default:break;}eventType = parser.next();}return children;}
}

2.线程类:

package com.zknu.zhihui;import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;@SuppressLint("HandlerLeak")
public class ClientThread extends Thread {private OutputStream outputStream = null;private InputStream inputStream = null;private Socket socket;private SocketAddress socketAddress;public static Handler childHandler;private boolean RxFlag = true;private RxThread rxThread;final int TEXT_INFO = 12;static final int RX_EXIT = 11;Context mainContext;Message msg; // Message消息private String strIP; // IP地址private int SERVER_PORT; // 端口public ClientThread(String ip, int port) { // 构造函数 一个参数 设置IP地址strIP = ip;SERVER_PORT = port;}// 连接网络void connect() {RxFlag = true;socketAddress = new InetSocketAddress(strIP, SERVER_PORT);socket = new Socket();try {socket.connect(socketAddress, 3000); // 连接服务器inputStream = socket.getInputStream();outputStream = socket.getOutputStream();msg = FacilityActivity.mainHandler.obtainMessage(1, "连接成功");FacilityActivity.mainHandler.sendMessage(msg);rxThread = new RxThread();rxThread.start();} catch (IOException e) {try {sleep(10);} catch (InterruptedException e1) {e1.printStackTrace();}msg = FacilityActivity.mainHandler.obtainMessage(0, "无法连接到服务器");FacilityActivity.mainHandler.sendMessage(msg);e.printStackTrace();} catch (NumberFormatException e) {}}void initChildHandler() {Looper.prepare(); // 在子线程中创建Handler必须初始化LooperchildHandler = new Handler() {// 子线程消息处理中心public void handleMessage(Message msg) {// 接收主线程及其他线程的消息并处理...switch (msg.what) {case 1:byte[] by=((String) msg.obj).getBytes();int len =by.length;try {outputStream.write(by, 0, len);outputStream.flush();} catch (IOException e) {e.printStackTrace();}break;case RX_EXIT:RxFlag = false;try {if (socket.isConnected()) {inputStream.close();outputStream.close();socket.close();}} catch (IOException e1) {e1.printStackTrace();}childHandler.getLooper().quit();// 结束消息队列break;default:break;}}};// 启动该线程的消息队列Looper.loop();}@Overridepublic void run() {connect();initChildHandler();msg = FacilityActivity.mainHandler.obtainMessage(2, "与服务器断开连接");FacilityActivity.mainHandler.sendMessage(msg);}// socket 接收线程public class RxThread extends Thread {public void run() {try {while (socket.isConnected() && RxFlag) {byte byt[] = new byte[1024 * 1024];int len = inputStream.read(byt);if (len > 0) {// 保存到myxml.xml中File file = new File("/data/data/com.zknu.zhihui","myxml.xml");BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));bos.write(byt, 0, len);bos.flush();bos.close();msg = FacilityActivity.mainHandler.obtainMessage(3,"保存成功");FacilityActivity.mainHandler.sendMessage(msg);} else if (len < 0) {msg = FacilityActivity.mainHandler.obtainMessage(2,"与服务器断开连接");FacilityActivity.mainHandler.sendMessage(msg);// 退出接收线程msg = childHandler.obtainMessage(RX_EXIT);childHandler.sendMessage(msg);break;}}if (socket.isConnected())socket.close();} catch (IOException e) {e.printStackTrace();}}}
}

3.主页面:

package com.zknu.zhihui;import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import com.zknu.utile.Commend;
import com.zknu.xmlpull.*;
import com.zknu.entity.Facility;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.Button;
import android.widget.ExpandableListView;
import android.widget.TextView;
import android.widget.Toast;public class FacilityActivity extends Activity {private ExpandableListView eLV;// 定义两个容器private List<String> parents = new ArrayList<String>();private List<List<Facility>> children = new ArrayList<List<Facility>>();public static Handler mainHandler;private String ip;private String port;private Intent intent;private ClientThread clientThread = null;private Message MainMsg;MyAdapter myAdapter = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_facility);// 接受传过的ip、portintent = getIntent();ip = intent.getStringExtra("ip");port = intent.getStringExtra("port");clientThread = new ClientThread(ip, Integer.valueOf(port));// 建立客户端线程clientThread.start();/** eLV = (ExpandableListView) findViewById(R.id.eLV); final MyAdapter* myAdapter = new MyAdapter(); eLV.setAdapter(myAdapter);*/// 主线程消息处理中心mainHandler = new Handler() {public void handleMessage(Message msg) {switch (msg.what) {case 1:Toast.makeText(FacilityActivity.this, "网络成功", 1).show();break;case 0:Toast.makeText(FacilityActivity.this, "亲!网络连接失败", 1).show();break;case 3:// 得到保存的xml文件File file = new File("/data/data/com.zknu.zhihui","myxml.xml");// 定义puller解析的流InputStream is = null;InputStream is1 = null;try {is = new FileInputStream(file);is1 = new FileInputStream(file);// Pull解析mxl文档 将解析出来的数据放到parents和children容器了parents = XmlPull.getParents(FacilityActivity.this, is);children = XmlPull.getChildren(FacilityActivity.this,is1);is.close();is1.close();} catch (Exception e) {e.printStackTrace();}//动态刷新适配器myAdapter.notifyDataSetChanged();break;default:break;}}};// ExpandableListView控件绑定适配器eLV = (ExpandableListView) findViewById(R.id.eLV);myAdapter = new MyAdapter();eLV.setAdapter(myAdapter);}// ExpandableListView适配器class MyAdapter extends BaseExpandableListAdapter {@Overridepublic int getGroupCount() {return parents.size();}@Overridepublic int getChildrenCount(int groupPosition) {return children.get(groupPosition).size();}@Overridepublic Object getGroup(int groupPosition) {return parents.size();}@Overridepublic Object getChild(int groupPosition, int childPosition) {return children.get(groupPosition).get(childPosition);}@Overridepublic long getGroupId(int groupPosition) {return groupPosition;}@Overridepublic long getChildId(int groupPosition, int childPosition) {return childPosition;}@Overridepublic boolean hasStableIds() {return false;}@Overridepublic View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent) {LayoutInflater inflater = LayoutInflater.from(FacilityActivity.this);View view = inflater.inflate(R.layout.parent, null);// 父标题TextView my_text = (TextView) view.findViewById(R.id.textView1);my_text.setText(parents.get(groupPosition));return view;}@Overridepublic View getChildView(final int groupPosition,final int childPosition, boolean isLastChild, View convertView,ViewGroup parent) {LayoutInflater inflater = LayoutInflater.from(FacilityActivity.this);View view = inflater.inflate(R.layout.child, null);// 子标题TextView my_text = (TextView) view.findViewById(R.id.childtextView1);// 得到children容器中Facility实体的name属性设置到my_textmy_text.setText(children.get(groupPosition).get(childPosition).getName());// 定义设备开关的按钮final Button btnON;final Button btnOFF;btnON = (Button) view.findViewById(R.id.buttonON);btnOFF = (Button) view.findViewById(R.id.buttonOFF);// 判断开关按钮的状态if (children.get(groupPosition).get(childPosition).getState() == 1) {btnON.setTextColor(Color.GREEN);btnOFF.setTextColor(Color.RED);} else {btnON.setTextColor(Color.RED);btnOFF.setTextColor(Color.GREEN);}// 定义开关的点击事件 给服务器发命令btnON.setOnClickListener(new View.OnClickListener() {String name;int id;int state;String commend;@Overridepublic void onClick(View v) {name = children.get(groupPosition).get(childPosition).getName();id = children.get(groupPosition).get(childPosition).getId();state = children.get(groupPosition).get(childPosition).getState();// 组合命令commend = Commend.getCommend(name, String.valueOf(id),String.valueOf(state));MainMsg = ClientThread.childHandler.obtainMessage(1,commend);ClientThread.childHandler.sendMessage(MainMsg);    }});return view;}@Overridepublic boolean isChildSelectable(int groupPosition, int childPosition) {return false;}}
}

智慧农业app手机开发相关推荐

  1. 简单Android app开发_app开发流程:如何简单快速进行app手机开发?

    现在大家的生活已经离不开手机,手机成为最主要的生活工具,app自然也成为最大的流量入口.在流量为王的时代,app手机开发自然成为企业营销及创业赚钱的选择.app开发流程是怎么样的?如何简单快速地开发一 ...

  2. 智慧农场app定制开发是否需要源码交付

    随着移动互联网的发展,越来越多的人开始使用智慧农场app进行农业生产活动.对于开发者来说,开发一款智慧农场app需要考虑很多因素. 1:智慧农场app定制开发需要源码交付吗 智慧农场app定制开发需要 ...

  3. 安卓手机软件开发_无代码手机app软件开发,让人人都是专业开发工程师

    点击上方蓝色字关注我们~ 近期,谷歌发布了自己的无代码在线app开发平台,这款全新工具旨在让任何一个人都可以轻松进行手机app软件开发.这样的动作无疑指引着安卓软件开发的未来.

  4. 手机app服务器端开发初期---工具选择

    最近新接触手机app服务器端开发,处于起步阶段,做一些记录. 1.Android平台下与服务器数据库通信的方法 在Android平台下,连接电脑服务器的MySQL.PostgreSQL.Oracle. ...

  5. 17个国内外手机APP应用开发平台推荐

    17个国内外手机APP应用开发平台推荐 随着智能手机的不断普及,安卓.苹果系统不断冲击着手机用户的神经,越来越多的技术热人员投入到了手机应用开发的热潮中,这里就总结归类下那些国内外优秀的手机APP应用 ...

  6. 医疗器械小程序或手机APP软件开发方案

    提供海内外高品质医疗器械 医疗器械市场国内近几年发展速度加快,但是与发达国家的部分医疗器械产品仍存在一定的差距,为给用户提供高品质多元化医疗器械产品,企业通过小程序或手机APP软件除了为用户提供国内先 ...

  7. 手机APP系统开发流程

    手机APP系统开发流程,随着移动互联网的发展,越来越多人拥有手机,手机APP也成了风口,手机app软件开发已经成为时代的潮流,大部分创业者看准了商机找专业的服务平台服务商去开发一款属于自己的商业APP ...

  8. 手机app定制开发流程图

    随着移动互联网的发展,智能手机技术的逐渐完善,引起了app开发的狂潮,所以很多人都希望能开发一个属于自己的app,那么应该如何开发呢,很多人都会咨询手机app定制开发公司品向科技,app定制开发流程是 ...

  9. 手机APP应用软件开发

    手机应用软件开发概述 App开发,是指专注于手机应用软件开发与服务. App是application的缩写,通常专指手机上的应用软件,或称手机客户端.另外目前有很多在线app开发平台. 当然移动互联网 ...

最新文章

  1. Python enumerate() 函数的使用
  2. 微服务架构核心20讲 课程的学习笔记
  3. WTL 自绘 进度条Progressbar
  4. mysql pdo 预处理_哪些方法用于实现pdo的预处理语句?
  5. fedora在此处打开终端
  6. 读取html文件,让其中的内容和notepad打开这个html的样子一样。
  7. OpenShift 4 - 基于Memory的HPA
  8. QT5::总结篇 QWidget
  9. android hook 模拟点击_手把手讲解 Android Hook-实现无清单启动Activity
  10. 线程与进程的区别及其通信方式
  11. 2021年第十届“认证杯“数学中国数学建模国际赛(小美赛
  12. Matlab实现Hermite插值多项式
  13. 固态硬盘用软件测试掉速严重,固态硬盘会不会掉速,得这么测
  14. IDEA git 切换分支注意事项(好文章!!)
  15. 23种常见设计模式详解
  16. PDF怎么转换成PPT且可以修改里面的文字
  17. android glide面试题,Android面试:80%的面试官关于Glide都会问这几个问题!【建议收藏】...
  18. 业内人士来说一下炫云渲染和渲染100云渲染使用真实感受吧
  19. 支付宝当面付打shang系统源码分享
  20. Intel(R) Xeon(R) CPU E5-2678 v3

热门文章

  1. 工厂ERP管理系统如何引入
  2. Python表白代码:“山河远阔 人间烟火无一是你 无一不是你”(附源码)
  3. 【Vue3】vite配置css 的sourceMap ,以及文件引用配置别名
  4. 如何调整图片尺寸大小?电脑怎么修改照片大小?
  5. 一款绿色免费的FLV文件合并裁剪器
  6. 计算机审计实习遇到问题及解决方法,浅析审计实务教学难题及解决途径
  7. 2009年节日放假时间安排
  8. cpp学习笔记:模板
  9. win7安装python教程视频_二级Python视频教学教程_因材考试网 - Win7之家
  10. 雅马哈机器人拆分视觉字符串