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
原创粉丝点击