网络图片查看
- 客户端发送http请求至服务器,如果请求成功,响应码为200,服务器会通过流向客户端返回请求的数据
- 主线程阻塞,应用会停止刷新界面,停止响应用户任何操作,用户体验非常差
- 耗时操作不要写在主线程
ANR异常
- Application not responding
消息队列
- 只有主线程可以刷新ui
- 主线程创建时,同时也会创建MessageQueue(消息队列)和Looper(消息轮询器)对象
- 如果需要使用消息队列机制,程序员需要自行创建Handler(消息处理器)
- 轮询器不断检测消息队列中是否有消息,如果有,就会把消息取出,交给Handler对象
- Handler对象拿到消息之后,就会在主线程执行handleMessage()
- 也就是说子线程,只要往消息队列中发送消息,主线程立刻执行handleMessage()
请求文本信息
提交数据
get方式提交表单
- 数据拼接在url后面写给服务器
- 表单数据需要经过url编码
post方式提交表单
package com.tz.melody;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends Activity {
private Button bt;
private ImageView iv;
Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 1:
iv = (ImageView) findViewById(R.id.iv);
iv.setImageBitmap((Bitmap) msg.obj);
break;
case 2:
Toast.makeText(MainActivity.this, "请求失败", 0).show();
break;
}
}
};
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void click(View v){
Thread t = new Thread(){
public void run() {
super.run();
String path = "http://192.168.1.106/dd.jpg";
try {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setReadTimeout(8000);
conn.setReadTimeout(8000);
conn.connect();
if(conn.getResponseCode() == 200){
InputStream is = conn.getInputStream();
Bitmap bm = BitmapFactory.decodeStream(is);
Message msg = new Message();
msg.obj = bm;
msg.what = 1;
handler.sendMessage(msg);
}else{
handler.sendEmptyMessage(2);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
};
t.start();
}
}