Amdroid网络连接---URL连接及单线程网络下载
2015-09-12 16:16
417 查看
ScrollView只能有一个子控件,子控件可以嵌套其他控件
UI线程中不能使用网路连接,必须新建一个线程创建连接,那么就可以使用Handler和Anynctask,当然作为网络连接肯定是有权限,Webview写了在这不赘述
首先使用用Handler:
在button点击事件中新建一个线程用于连接网络:
用于网络连接的方法:
初始化Handler,用Handler把message放到Textview上显示,最后的结果是网页源码,因为是按字节读的网页:
现在在写一个用Anynctask的单线程网络下载任务,因为是封装好的,所以按格式写就好了,直接上代码:
省略控件声明、inviewbyid、以及balabala~
UI线程中不能使用网路连接,必须新建一个线程创建连接,那么就可以使用Handler和Anynctask,当然作为网络连接肯定是有权限,Webview写了在这不赘述
首先使用用Handler:
在button点击事件中新建一个线程用于连接网络:
public void onClick(View v) { switch (v.getId()){ case R.id.button_url: Thread thread=new Thread(new Runnable() { @Override public void run() { connectServlet();//调用用于网络连接的方法 } }); thread.start(); break; } }
用于网络连接的方法:
private void connectServlet() { try { URL url=new URL("http://www.360.com"); //跟java中一样的写法 URLConnection connection=url.openConnection(); InputStream is=connection.getInputStream();//得到输入流 BufferedReader bf=new BufferedReader(new InputStreamReader(is)); String line=bf.readLine(); StringBuffer buffer=new StringBuffer(); while (!line.isEmpty()){ line=bf.readLine(); buffer.append(line);//动态加载读取的网页内容 Log.d("", line); Message msg=handler.obtainMessage();//发送message给Handler,显示到Texview msg.obj=buffer.toString().trim();//去除空格 msg.what=CONNECT; handler.sendMessage(msg); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
初始化Handler,用Handler把message放到Textview上显示,最后的结果是网页源码,因为是按字节读的网页:
private Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what){ case CONNECT: String message= (String) msg.obj; mTextview_show.setText(message);//把读取的网页显示到textview上 break; } } };
现在在写一个用Anynctask的单线程网络下载任务,因为是封装好的,所以按格式写就好了,直接上代码:
省略控件声明、inviewbyid、以及balabala~
public void onClick(View v) { switch (v.getId()){ case R.id.button_single: MySingleDownloadtask task =new MySingleDownloadtask(); task.execute();//启动task break; case R.id.button_more: break; } } class MySingleDownloadtask extends AsyncTask<String,Integer,String>{ @Override protected String doInBackground(String... params) { try { URL url=new URL("http://192.168.0.30:8080/MyWebTest/music/aa.mp3"); //连接服务器文件绝对路径 URLConnection connection=url.openConnection(); int length=connection.getContentLength(); InputStream is=connection.getInputStream();//得到输入流 File file=new File(Environment.getExternalStorageDirectory(),"aa.mp3"); if (!file.exists()){//文件是否存在 file. createNewFile(); } FileOutputStream os=new FileOutputStream(file);//给file建立输出流 byte[] array=new byte[1024]; int data=is.read(array); int sum=0; while (data!=-1){ os.write(array,0,data);//从数组偏移量0开始写data到输出流 sum+=data; publishProgress(sum, length); data=is.read(array); } os.flush(); os.close(); is.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); int progress= (int) (values[0]*100.0/values[1]);//转换成百分比形式,不用写setMax progressBar.setProgress(progress); } @Override protected void onPostExecute(String s) { super.onPostExecute(s); } } }
相关文章推荐
- TCP之RST发送场景
- TCP 和 HTTP
- C#网络编程
- android网络访问
- 21_02_httpd安装配置
- Java实现Http请求参数对特殊字符的处理办法
- epoll详解
- 0911Android基础网络技术之WebView控件
- 【网络】(二)流协议粘包问题
- P2P中DHT网络介绍
- virtualbox复制虚拟机网络问题
- 对stdin,stdout 和STDOUT_FILENO,STDIN_FILENO的学习 http://www.cnblogs.com/hoys/archive/2011/05/11/2043044
- http的内置对象 Session Application Global.aspx文件
- (5.2.2)TCP和UDP的区别(转)
- TCP三次握手、四次挥手
- 网络管理技术(二)
- ios网络编程(二)之网络连接
- linux c 检测网络状态
- HttpRequest信息内容介绍
- HTTP协议中POST、GET、HEAD、PUT等请求方法以及一些常见错误(转载)