您的位置:首页 > 理论基础 > 计算机网络

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.结果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: