概述
http请求
使用步骤:
1. 创建一个url
URL url = new URL(PathString);
2. 使用url打开一个http链接
HttpURLConnection urlCon = (HttpURLConnection)url.openConnection();
HttpURLConnection urlCon = (HttpURLConnection)url.openConnection();
3. 设置请求方法和超时时间
urlCon.setRequestMethod("GET");
urlCon.setConnectTimeout(5000);
urlCon.setRequestMethod("GET");
urlCon.setConnectTimeout(5000);
4. 获取http链接的状态码,根据状态码做处理 状态码:200 ok,404 没有找到资源、503、509 服务器端错误
int code = conn.getResponseCode();
if(code == 200){
if(code == 200){
//第5步放在这里
}
5. 获取数据流并转换为字符串
InputStream inputStream = urlCon.getInputStream();
String webCodeString = StreamTools.readStream(inputStream);
5. 获取数据流并转换为字符串
InputStream inputStream = urlCon.getInputStream();
String webCodeString = StreamTools.readStream(inputStream);
消息
使用步骤:
1. 创建一个Handler对象,并实现它的handleMessage方法
private Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
String data = (String) msg.obj;
tv_content.setText(data);
};
};
2. 在需要发送消息的地方使用Handler对象发送一个消息,会发送到handlerMesage函数中
Message msg = Message.obtain();//从消息池中取出一个消息,效率比new消息要高
msg.obj = data;
handler.sendMessage(msg);
消息原理
前提知识:
所有使用UI界面的操作系统,后台都运行着一个死循环,在不停的监听和接收用户发出的指令,一旦接收指令就立即执行。
当我们的Android应用程序的进程一创建的时候,系统就给这个进程提供了一个Looper,Looper是一个死循环,它内部维护这个一个消息队列,
所有使用UI界面的操作系统,后台都运行着一个死循环,在不停的监听和接收用户发出的指令,一旦接收指令就立即执行。
当我们的Android应用程序的进程一创建的时候,系统就给这个进程提供了一个Looper,Looper是一个死循环,它内部维护这个一个消息队列,
Loop不停地从消息队列中取消息(Message),取到消息就发送给了Handler,最后Handler根据接收到的消息去修改UI。
mainlooper---应用启动好之后 mainLooper(消息循环器) 就已经创建好了 不断监视消息队列里的消息 ,一旦发现消息队列里有消息就会把消息交给Hander处理
Handler 就会调用 handleMessage()处理 ,Handler的作用就是发送消息和处理消息
补充
1. 非UI线程不能修改UI界面(进度条相关的UI除外,可以在非UI线程中更新进度条相关UI)activity中的oncreate方法和单击事件的方法都是运行在主线程(创建UI)中的。
只有创建UI界面的那个线程才能修改UI: Only the original thread that created a view hierarchy can touch its views.
主线程(UI线程),只有主线程才能修改UI。如果子线程修改UI,系统验证当前线程是不是主线程,如果不是主线程,就会终止运行。
2. 网络在主线程上的异常: android.os.NetworkOnMainThreadException
从Androi4.0开始,google增加UI界面运行的流畅性,强制要求访问网络等耗时操作不能在主线程中进行,只能在子线程中进行。
从Androi4.0开始,google增加UI界面运行的流畅性,强制要求访问网络等耗时操作不能在主线程中进行,只能在子线程中进行。
3. Handler发送空消息
handler.sendEmptyMessage(1);//直接发送一个1过去,不用构造Message对象
在消息处理函数中可以用msg.what获得1
消息处理常用API
//创建一个子线程
new Thread(){public void run() {
//1 常见消息处理api
/*runOnUiThread( new Runnable() {
public void run() {
tv.setText("我直接更新textview了 哈哈哈哈 ");
}
});*/
};}.start();
// 2常见消息处理api delayMillis延迟时间 几秒钟后 执行 run方法
/*new Handler().postDelayed(new Runnable() {
@Override
public void run() {
tv.setText("我直接更新textview了 哈哈哈哈 ,有本事 你来打我啊");
}
}, 5000);
*/
//3 常见消息处理api
new Handler().postAtTime(new Runnable() {
@Override
public void run() {
tv.setText("我直接更新textview了 哈哈哈哈 ,有本事 你来打我啊 哈哈哈");
}
}, SystemClock.uptimeMillis()+5000);
}
示例代码:
package com.itheima.htmlview;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.itheima.htmlview.utils.StreamTools;
public class MainActivity extends Activity {
private EditText et_path;
private TextView tv_content;
private Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
String data = (String) msg.obj;
tv_content.setText(data);
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_path = (EditText) findViewById(R.id.et_path);
tv_content = (TextView) findViewById(R.id.tv_content);
}
public void click(View view){
new Thread(){
public void run() {
try {
String path = et_path.getText().toString().trim();
// 1、发送请求
// (1)创建一个URL对象
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// (2)设置请求头信息
conn.setRequestMethod("GET");
conn.setConnectTimeout(3000);
// 2、服务器返回数据
// (1)判断状态码:200 ok,404 没有找到资源、503、509 服务器端错误
int code = conn.getResponseCode();
if(code == 200){
// (2)解析服务器返回的二进制数据,解析成一个字符串
InputStream is = conn.getInputStream();
String data = StreamTools.readStream(is);
// (3)把string显示在TextView上
Message msg = Message.obtain();
msg.obj = data;
handler.sendMessage(msg);
}else{
Toast.makeText(MainActivity.this, "请输入一个HTML页面的网络地址", 0).show();
}
} catch (Exception e) {
e.printStackTrace();
}
};
}.start();
}
}
最后
以上就是耍酷柜子为你收集整理的http请求和消息http请求消息示例代码:的全部内容,希望文章能够帮你解决http请求和消息http请求消息示例代码:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复