Android之Http通信HttpConnection
来源:互联网 发布:imovie mac 教程 编辑:程序博客网 时间:2024/05/17 02:30
1.解析网站并显示
因为要处理网页读取,需要开启线程,并在UI上更新,则要使用handler
注意Handler导入的是os包
下面是MainActivity
private WebView webView; private WebView webView; private Handler handler=new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_http_url_connection); webView=(WebView)findViewById(R.id.webview); new HttpThread("http://www.baidu.com",handler,webView).start(); }
子线程类
public class HttpThread extends Thread { private String url=null; private Handler handler; private WebView webView; StringBuffer sb; public HttpThread(String url,Handler handler,WebView webView){ this.url=url; this.handler=handler; this.webView=webView; } @Override public void run() { try { //获取URL对象 URL httpUrl=new URL(url); //通过URL对象获取连接 HttpURLConnection conn= (HttpURLConnection) httpUrl.openConnection(); //设置 连接读取时长 conn.setReadTimeout(5000); //设置以get形式请求 conn.setRequestMethod("GET"); //字符串流 sb=new StringBuffer(); //获得连接的字节输入流 InputStream is=conn.getInputStream(); //将字节输入流转换为字符输入流 InputStreamReader isr=new InputStreamReader(is); //加载到缓存流中,只有缓存流可以直接读一行 BufferedReader reader=new BufferedReader(isr); String str; while ((str=reader.readLine())!=null){ sb.append(str); } //使用post(),在runable中更新UI handler.post(new Runnable() { @Override public void run() { webView.loadData(sb.toString(),"text/html;charset=utf-8",null); } }); } catch (Exception e) { e.printStackTrace(); } }}
2.解析图片网址,先保存在外部存储中,在通过bitmap获取到UI中
在MainActivity中开启线程
下面的网址一定要是一个图片网址,即后缀以,jpg或其他图片格式显示
new HttpThread("http://pic.sc.chinaz.com/files/pic/pic9/201512/apic17727.jpg",handler,imageView).start();
子线程类
public class HttpThread extends Thread { private String url=null; private Handler handler; private ImageView imageView; public HttpThread(String url,Handler handler,ImageView imageView){ this.url=url; this.handler=handler; this.imageView=imageView; } @Override public void run() { try { URL httpUrl=new URL(url); //通过URL对象获取连接 HttpURLConnection conn= (HttpURLConnection) httpUrl.openConnection(); //设置 连接读取时长 conn.setReadTimeout(5000); //设置以get形式请求 conn.setRequestMethod("GET"); //文档上只是写着设置连接允许输入,不知道是什么意思 conn.setDoInput(true); InputStream in=conn.getInputStream(); FileOutputStream out=null; File downloadFile=null; Log.i("info","进入到HttpThread中"); String fileName=String.valueOf(System.currentTimeMillis()); //只有在SD卡状态为MEDIA_MOUNTED时,/mmt/sdcard目录才是可读可写的,并且可以创建目录及文件 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { //获取外部存储路径,外部存储不一定是sd卡,还包括手机自带的内存,内部存储是指data/data/包名下的 File parent=Environment.getExternalStorageDirectory(); //在获取的目录下新建文件名为fileName的文件 downloadFile=new File(parent,fileName); //文件输出流 out=new FileOutputStream(downloadFile); } byte[] b=new byte[2*1024]; int len; if(out!=null){ //通过字节流的读取方法,以数组为缓存 while((len=in.read(b))!=-1){ out.write(b,0,len); } } //通过指定sd卡图片文件路径来获取bitmap final Bitmap bitmap= BitmapFactory.decodeFile(downloadFile.getAbsolutePath()); handler.post(new Runnable() { @Override public void run() { Log.i("info","写入成功"); imageView.setImageBitmap(bitmap); } }); } catch (Exception e) { e.printStackTrace(); } }}
上面获取网页图片是先存到外部存储中,然后在将图片从外部存储中取出来,当然可以直接通过网页来获取,下面的代码只是将获取的方式从文件改为了流
URL httpUrl=new URL(url); HttpURLConnection connection=(HttpURLConnection)httpUrl.openConnection(); connection.setReadTimeout(5000); connection.setRequestMethod("GET"); InputStream in=connection.getInputStream(); //通过获取网上的输入流,来将图片传给Bitmap final Bitmap bitmap= BitmapFactory.decodeStream(in); //同样通过post更新UI handler.post(new Runnable() { @Override public void run() { imageView.setImageBitmap(bitmap); } });
2 1
- Android之Http通信HttpConnection
- Android Http编程之HttpConnection
- Android HTTP(HttpClient, HttpConnection)
- android应用开发之HttpConnection
- Android 使用URL,URLConnection,HttpConnection 不能通信的问题
- Tornado源码分析之HTTPConnection ---- http协议解析
- Android使用Http协议访问网络——HttpConnection
- Android 之 网络http通信
- android http通信之httpclient
- Android HttpConnection HttpClient
- Android HttpConnection 使用
- 转贴:Android网络编程之Http通信
- Android网络编程之Http通信
- Android 网络编程之 Http 通信
- Android网络编程之Http通信
- Android网络编程之Http通信
- Android网络编程之Http通信
- Android开发之Http通信HttpURLConnection接口
- rtp 解包h264
- Codeforces Round #368 (Div. 2) C Pythagorean Triples(构造勾股数)
- 3. Longest Substring Without Repeating Characters(难,重要)
- win7 caffe使用笔记——计算图像均值
- leetcode Set Matrix Zeroes
- Android之Http通信HttpConnection
- LA 3644并查集
- LruCache源码解析
- SPOJ COT(树上k大,主席树+LCA)
- FFmpeg音视频同步的问题
- 93.leetcode Restore IP Addresses(medium)[回溯 DFS]
- MySQL for mac 连接报错:Access denied for user 'root'@'localhost' (using password: YES)
- Codeforces Round #368 (Div. 2) D Persistent Bookcase(离线+DFS)
- [2-sat]模型基础(poj3678)