Amdroid网络连接---URL连接及单线程网络下载

来源:互联网 发布:数控铣床编程简单图案 编辑:程序博客网 时间:2024/05/17 00:06

ScrollView只能有一个子控件,子控件可以嵌套其他控件
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() {@Overridepublic 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(){@Overridepublic 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();//启动taskbreak;case R.id.button_more:break;        }    }class MySingleDownloadtask extends AsyncTask<String,Integer,String>{@Overrideprotected 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;        }@Overrideprotected void onProgressUpdate(Integer... values) {super.onProgressUpdate(values);int progress= (int) (values[0]*100.0/values[1]);//转换成百分比形式,不用写setMaxprogressBar.setProgress(progress);        }@Overrideprotected void onPostExecute(String s) {super.onPostExecute(s);        }    }}
0 0