//从服务器获得数据
privateTextView ptv;
privateButton btn_next;
privateHandler pic_hdl;
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.painting);
ptv = (TextView)findViewById(R.id.ptv);
btn_next =(Button)findViewById(R.id.btn_loadnext);
btn_next.setOnClickListener(newButtonListener());
pic_hdl = new PicHandler();
}
classButtonListener implements OnClickListener{
@Override
public void onClick(View v) {
// TODO Auto-generated methodstub
if( v.getId() ==R.id.btn_loadnext){
Thread t = newLoadPicThread();
t.start();
}
}
}
classLoadPicThread extends Thread{
@Override
public void run(){
HttpClient httpClient = newDefaultHttpClient();
HttpGet httpGet = newHttpGet("http://www.nowamagic.net/academy/android/");
try {
HttpResponse rsp =httpClient.execute(httpGet);
int code =rsp.getStatusLine().getStatusCode();
if( code == 200 ){
HttpEntityentity = rsp.getEntity();
InputStreamis = entity.getContent();
BufferedReaderreader = new BufferedReader(new InputStreamReader(is));
String s =reader.readLine();
Message msg =pic_hdl.obtainMessage();
msg.obj ="已从服务器获取的数据:"+ s;
pic_hdl.sendMessage(msg);
}
} catch (Exception e) {
// TODO Auto-generatedcatch block
e.printStackTrace();
}
}
}
classPicHandler extends Handler{
@Override
public void handleMessage(Message msg){
// TODO Auto-generated methodstub
String s = (String)msg.obj;
ptv.setText(s);
}
}
关键是 LoadPicThread 里的代码,我们简单介绍一下:
1. 在面向对象的世界里,一切都用对象表示。
2. HttpClient 代表客户端的对象,HttpGet 代表请求的对象,HttpResponse 代表服务器响应的对象,HttpEntity 代表返回的数据的实体对象,然后用流的方式将数据读取。
3. 呃……就这么多,没第三条了。
App 运行效果:
差点忘了,需要在 Manifest.xml 里加上这么一句(授权访问网络)才能访问网络:
<uses-permissionandroid:name="android.permission.INTERNET" />