http servlet服务器和android客户端(二)第一个android客户端
2016-01-19 00:49
567 查看
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; } @Override public 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; @Override protected 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(); } @Override public 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; } @Override public 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; } } } @Override public 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; } @Override public 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.结果
相关文章推荐
- 使用常见的网络命令查看当前网络状态——Mac OS X篇
- iOS网络-AFNetworking检测网络状态
- Atitit. servlet 与 IHttpHandler ashx listen 和HttpModule的区别与联系 原理理论 架构设计 实现机制 java php c#.net js javascript c++ python
- Atitit. servlet 与 IHttpHandler ashx listen 和HttpModule的区别与联系 原理理论 架构设计 实现机制 java php c#.net j
- Atitit. servlet 与 IHttpHandler ashx listen 和HttpModule的区别与联系 原理理论 架构设计 实现机制 java php c#.net j
- 安装mysql时出现HTTP 500 内部服务…
- 厦门巨游网络科技有限公司(HOTPOWER)承接游戏UI外包
- GCD group在多个网络请求的响应之前就已经执行
- mac分享wifi,让手机使用电脑的网络
- iOS网络-AFNetworking序列化
- shell命令使用HDFS的distcp命令
- 【转】HTTP 头部解释
- Android HTTPS认证
- iOS网络-AFNetworking基本使用,文件下载,上传
- 网络篇-解析XML
- ios9不能使用http解决方法
- iOS网络-ZipArchive框架的文件压缩和解压
- Java API —— 网络编程
- mysql错误:Can’t create TCP/IP socket (10106) 解决方法
- (转)Java发送http请求(get 与post方法请求)