博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android版Web服务器实现(四)界面更新
阅读量:5370 次
发布时间:2019-06-15

本文共 5435 字,大约阅读时间需要 18 分钟。

《》实现了HTTP的响应,那么在界面上要如何控制呢?界面上的控制,只需简单的几个选项。

1、配置web服务的根路径。

2、配置端口。

3、启动与停止服务。

下面是实现的代码。

MainActivity.java

package com.sparkle.webservice;import java.net.InetAddress;import android.annotation.SuppressLint;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.text.InputType;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;public class MainActivity extends Activity {	private Button _startStop_button = null;	private EditText _root_text = null;	private TextView _ip_text = null;	private EditText _port_text = null;	private MyLog _myLog = new MyLog(getClass().getName());	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.main_activity);		Init();	}	@Override	protected void onStart() {		// TODO Auto-generated method stub		super.onStart();		UiUpdater.registerClient(_handler);	}	@Override	protected void onResume() {		// TODO Auto-generated method stub		super.onResume();		UiUpdater.registerClient(_handler);	}	@Override	protected void onPause() {		// TODO Auto-generated method stub		super.onPause();		UiUpdater.unregisterClient(_handler);	}	@Override	protected void onStop() {		// TODO Auto-generated method stub		super.onStop();		UiUpdater.unregisterClient(_handler);	}	@Override	protected void onDestroy() {		// TODO Auto-generated method stub		super.onDestroy();		UiUpdater.unregisterClient(_handler);	}	private void Init() {		FetchUIControls();		BindingEvnents();		InitUI();	}	private void FetchUIControls() {		_startStop_button = (Button) findViewById(R.id.startStop_button);		_root_text = (EditText) findViewById(R.id.root_text);		_ip_text = (TextView) findViewById(R.id.ip_text);		_port_text = (EditText) findViewById(R.id.port_text);	}	private void BindingEvnents() {		if (_startStop_button != null) {			_startStop_button.setOnClickListener(new ClickListener());		}	}	private void InitUI() {		if (_root_text != null) {			_root_text.setText(Defaults.getRoot());					}		if (_port_text != null) {			_port_text.setText(String.format("%1d",Defaults.getPort()));		}	}	@SuppressLint("HandlerLeak")	private Handler _handler = new Handler() {		@Override		public void handleMessage(Message msg) {			switch (msg.what) {			case MESSAGES.UPDATE_UI:				UpdateUi();				break;			default:				break;			}		}	};	public void UpdateUi() {		if (WebServer.isRunning()) {			_myLog.l(Log.DEBUG, "updateUi: server is running", true);			_startStop_button.setText(R.string.stop);			_root_text.setEnabled(false);						_port_text.setEnabled(false);			_root_text.setInputType(InputType.TYPE_NULL);			_port_text.setInputType(InputType.TYPE_NULL);			InetAddress address = WebServer.getWifiIp(MainActivity.this);			if (address != null) {				_ip_text.setText("http://" + address.getHostAddress() + ":"						+ WebServer.getPort() + "/");			} else {				_myLog.l(Log.VERBOSE, "Null address from getServerAddress()",						true);				_ip_text.setText(R.string.can_not_get_ip);			}		} else {			_startStop_button.setText(R.string.start);			_ip_text.setText(R.string.can_not_get_ip);			_root_text.setEnabled(true);						_port_text.setEnabled(true);				_root_text.setInputType(InputType.TYPE_CLASS_TEXT);			_port_text.setInputType(InputType.TYPE_CLASS_NUMBER);		}		}	private class ClickListener implements OnClickListener {		@Override		public void onClick(View v) {			switch (v.getId()) {			case R.id.startStop_button: {				StartOrStop();				break;			}			default: {				break;			}			}		}		private void StartOrStop() {			try {				String startString = getString(R.string.start);				String stopString = getString(R.string.stop);				String buttonText = _startStop_button.getText().toString();				if (buttonText.equals(startString)) {					Start();				} else if (buttonText.equals(stopString)) {					Stop();				} else {					// Do nothing					_myLog.l(Log.ERROR, "Unrecognized start/stop text");				}			} catch (Exception e) {				// TODO: handle exception			}		}		private void Start() {			InitSetting();			StartListen();		}		private void InitSetting() {			Defaults.setRoot(_root_text.getText().toString());			Defaults.setPort(Integer.parseInt(_port_text.getText().toString()));		}		private void StartListen() {			Context context = getApplicationContext();			WebServer.Start(context);		}		private void Stop() {			Context context = getApplicationContext();			WebServer.Stop(context);		}	}}
注:

1、使用Handler来通信,并依据消息更新界面。

2、通过UiUpdater来管理handler。

UiUpdater.java

package com.sparkle.webservice;import java.util.ArrayList;import java.util.List;import android.os.Handler;public class UiUpdater {	protected static MyLog myLog = new MyLog("UiUpdater");	protected static List
clients = new ArrayList
(); public static void registerClient(Handler client) { if(!clients.contains(client)) { clients.add(client); } } public static void unregisterClient(Handler client) { while(clients.contains(client)) { clients.remove(client); } } public static void updateClients() { for (Handler client : clients) { client.sendEmptyMessage(MESSAGES.UPDATE_UI); } }}
相关的权限:

实现的效果图

转载请注明出处:

转载于:https://www.cnblogs.com/sparkleDai/p/7605024.html

你可能感兴趣的文章
SAP查找用户的登录记录
查看>>
Redis 数据序列化方法 serialize, msgpack, json, hprose 比较
查看>>
java-信息安全(十一)-非对称加密算法ECC
查看>>
TextBoxFor控件的扩展---Bootstrap在mvc上的应用
查看>>
数学图形之将曲线转化为曲面
查看>>
IP首部校验和计算
查看>>
获取真实IP地址
查看>>
Tomcat8.5&Mysql8.0配置数据库连接池(DBCP)
查看>>
echarts_02
查看>>
《团队-团队编程项目作业名称-模块测试过程》
查看>>
20165234 结对编程练习_四则运算(第二周)
查看>>
Python学习02
查看>>
树回归 CART算法
查看>>
博客维护停止,需要的伙伴们移步http://blog.csdn.net/panhouye
查看>>
org.springframework.beans.factory.BeanDefinitionStoreException错误
查看>>
git分支
查看>>
Yii框架的增删改查总结分析
查看>>
django基础篇04-自定义simple_tag和fitler
查看>>
django入门篇之( web应用)
查看>>
【UOJ 520】棋盘
查看>>