http servlet服务器和android客户端(二)第一个android客户端
来源:互联网 发布:布鲁克大学 知乎 编辑:程序博客网 时间:2024/06/05 20:53
1.添加控件
Main activity中添加一个EditText用于输入网址、一个Button用于发送请求、一个TextView用于显示从服务器获取的信息。如图:
2. 建立子线程
由于网络请求是耗时操作需要放在子线程,子线程和主线程通过message通信,所以我们需要建立HandlerThread。
private void initHttpHandlerThread() {HandlerThread handlerThread = new HandlerThread(HttpHandler.class.getName());handlerThread.start();mHttpHandler = new HttpHandler(handlerThread.getLooper(), mMainHandler);}
3.添加主handler处理
由于只能在主线程更新view,所以需要在主线程添加MainHandler来处理子线程的message消息,更新textview。
private void initMainHandler() {mMainHandler = new MainHandler(getMainLooper(), this);}private static class MainHandler extends Handler {IViewCallback viewCallback = null;public MainHandler(Looper mainLooper, IViewCallback callback) {super(mainLooper);viewCallback = callback;}@Overridepublic void handleMessage(Message msg) {Log.i(TAG, "msg.what: " + msg.what);switch (msg.what) {case EVENT_SET_TEXTVIEW:if(msg.obj != null) {viewCallback.setTextView("" + msg.obj);}break;default:break;}}}
4.整个MainActivity代码
package com.tricycle.android;import android.os.Bundle;import android.os.Handler;import android.os.HandlerThread;import android.os.Looper;import android.os.Message;import android.app.Activity;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 implements OnClickListener, IViewCallback {private static final String TAG = "Tricycle";public static final int EVENT_SET_TEXTVIEW = 1;public Button btGo = null;public TextView tvText = null;public EditText edAddress = null;private HttpHandler mHttpHandler = null;private MainHandler mMainHandler = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btGo = (Button) findViewById(R.id.btGo);btGo.setOnClickListener(this);tvText = (TextView) findViewById(R.id.tvText);edAddress = (EditText) findViewById(R.id.etAddress);initMainHandler();initHttpHandlerThread();}@Overridepublic void onClick(View view) {switch (view.getId()) {case R.id.btGo:String address = "" + edAddress.getText();Log.i(TAG, address);mHttpHandler.obtainMessage(HttpHandler.EVENT_HTTP_GET, address).sendToTarget();break;default:break;}}private void initMainHandler() {mMainHandler = new MainHandler(getMainLooper(), this);}private void initHttpHandlerThread() {HandlerThread handlerThread = new HandlerThread(HttpHandler.class.getName());handlerThread.start();mHttpHandler = new HttpHandler(handlerThread.getLooper(), mMainHandler);}private static class MainHandler extends Handler {IViewCallback viewCallback = null;public MainHandler(Looper mainLooper, IViewCallback callback) {super(mainLooper);viewCallback = callback;}@Overridepublic void handleMessage(Message msg) {Log.i(TAG, "msg.what: " + msg.what);switch (msg.what) {case EVENT_SET_TEXTVIEW:if(msg.obj != null) {viewCallback.setTextView("" + msg.obj);}break;default:break;}}}@Overridepublic void setTextView(String text) {tvText.setText(text);}}
5.回调接口
package com.tricycle.android;public interface IViewCallback {void setTextView(String text);}
6.HttpHandler
package com.tricycle.android;import android.os.Handler;import android.os.Looper;import android.os.Message;import android.util.Log;public class HttpHandler extends Handler {private static final String TAG = "HttpHandler";public static final int EVENT_HTTP_GET = 1;private Handler mMainHandler = null;public HttpHandler(Looper looper, Handler handler) {super(looper);mMainHandler = handler;}@Overridepublic void handleMessage(Message msg) {Log.i(TAG, "msg.what: " + msg.what);switch (msg.what) {case EVENT_HTTP_GET:String strAddress = new HttpRequest().get((String)msg.obj);mMainHandler.obtainMessage(MainActivity.EVENT_SET_TEXTVIEW, strAddress).sendToTarget();break;default:break;}}}
7.Http请求
package com.tricycle.android;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.URL;import java.net.URLConnection;public class HttpRequest {public String get(String url) {String strReqestUrl = url;StringBuffer result = new StringBuffer();BufferedReader in = null;try {URL requestUrl = new URL(strReqestUrl);URLConnection connection = requestUrl.openConnection();connection.connect();in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String line;while((line = in.readLine()) != null) {result.append(line);}} catch (IOException e) {e.printStackTrace();}return result.toString();}}
8.结果
1 0
- http servlet服务器和android客户端(二)第一个android客户端
- http servlet服务器和android客户端(一)第一个servlet
- IDEA搭建servlet服务器与android客户端通信(二)
- 第一个android客户端笔记
- HTTP通信--Android客户端与Servlet通信
- android服务器与客户端交互之servlet
- IDEA搭建servlet服务器与android客户端通信(一)
- Android客户端和服务器交互
- Android客户端和服务器通信
- Android服务器与客户端数据交互(Http协议)
- android客户端与部署到tomcat的servlet服务器之间实现http通信
- 编写和MQTT服务器通信的Android客户端程序(二)
- android服务端客户端(二)
- android 服务器与客户端
- android客户端访问服务器
- Android客户端访问服务器
- android客户端与servlet服务器交互简单示例
- Servlet+msql+ android客户端实现从服务器获取信息
- (一一六)类的构造函数和析构函数
- 移除未排序链表中的重复结点
- python3 crontab 下运行python输出中文失败
- hypervisor on vehicle
- MonoBehaviour继承类及其重要方法
- http servlet服务器和android客户端(二)第一个android客户端
- (一一七)this指针
- (一一八)对象数组
- 学习java的道路
- (一一九)类作用域
- 动态规划-最大子矩阵和
- (一二〇)抽象数据类型
- 疾病尚需用猛药
- (一二一)第十章复习题