Android网络操作的几种方法

 我来答
ahcc08
2018-06-30 · 知道合伙人软件行家
ahcc08
知道合伙人软件行家
采纳数:11853 获赞数:51940
拥有丰富的软件开发经验。

向TA提问 私信TA
展开全部

第一种方式:使用HttpURLConnection进行联网操作

这个方法需要我们手动构建一个http请求包,发送到指定的服务器

get方式

  • 设置URL

  • 打开连接

  • 设置请求方法为get

  • 设置连接超时时间

  • 设置读取超时时间

  • 把当前的request发送到服务器端

  • 等待服务器的响应(此处会阻塞)

  • 获得响应码(并在响应码中做相应的操作),因为安卓子线程内不允许做UI更新的操作,所以需要转到主线程来做(通过安卓中的handler来将信息传递到主线程)

  • public void getPic(View v){
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        //首先要支出服务器的地址
                        URL url=new URL("http://192.168.2.1/day10_NetworkServer/brushli.jpg");
                        //通过http连接
                        HttpURLConnection httpurlConnection = (HttpURLConnection) url.openConnection();
                        //设置请求方式,并设置等待响应时间
                        httpurlConnection.setRequestMethod("GET");
                        httpurlConnection.setConnectTimeout(5000);
                        //把当前的request发送到服务器(安卓不允许在主线程内做耗时操作,如连接服务器)
                        httpurlConnection.connect();
                        //发送完连接后等待操作,这个是阻塞式方法,
                        int responseCode = httpurlConnection.getResponseCode();

                        //根据得到的响应代码和response的信息作出相应的操作
                        if(responseCode==200){
                            //从服务器读取正确与否的信息
                            InputStream is=httpurlConnection.getInputStream();
                            File file=new File("/data/data/com.rgd.day10_network_3/files");
                            file.mkdir();
                            FileOutputStream fos=new FileOutputStream(new File("/data/data/com.rgd.day10_network_3/files/brushli.jpg"));
                            byte[] buffer=new byte[1024];
                            int read;
                            while ((read =is.read(buffer))!=-1){
                                fos.write(buffer,0,read);
                            }
                            //由于子线程不允许做UI更新操作,与要通过Handler进行和主线程的通信操作

                            Message msg=new Message();
                            msg.what=1;
                            handler.sendMessage(msg);
                            fos.close();
                            is.close();

                        }
                    } catch (MalformedURLException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                }
            }).start();

        }
    Handler handler=new Handler(){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                switch(msg.what){
                    case 1:
                        Toast.makeText(MainActivity.this, "保存图片成功", Toast.LENGTH_LONG).show();
                        break;
                    case 2:
                        Toast.makeText(MainActivity.this,"保存MP3成功",Toast.LENGTH_LONG).show();
                        break;
                    case 3:
                        Toast.makeText(MainActivity.this,"保存视频成功",Toast.LENGTH_SHORT).show();
                    default:
                        break;
                }
            }
        };

2.post方式

  • 操作跟get差不多,除了post传递信息是通过正文传递的,而get是放在连接中的

  • new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            //首先要支出服务器的地址
                            URL url=new URL("http://192.168.106.1/day10_NetworkServer/servlet/loginInfo");
                            //通过http连接
                            HttpURLConnection httpurlConnection = (HttpURLConnection) url.openConnection();
                            //设置请求方式,并设置等待响应时间
                            httpurlConnection.setRequestMethod("POST");
                            httpurlConnection.setConnectTimeout(5000);

                            String data="username="+username+"&password="+password+"&email="+email+"&phonenumber="+phonenumber;
                            OutputStream outputStream = httpurlConnection.getOutputStream();
                            outputStream.write(data.getBytes());
                            //把当前的request发送到服务器(安卓不允许在主线程内做耗时操作,如连接服务器)
                            httpurlConnection.connect();
                            //发送完连接后等待操作,这个是阻塞式方法,
                            int responseCode = httpurlConnection.getResponseCode();

                            //根据得到的响应代码和response的信息作出相应的操作
                            if(responseCode==200){
                                //从服务器读取正确与否的信息
                                InputStream is=httpurlConnection.getInputStream();
                                byte[] buffer=new byte[1024];
                                int read = is.read(buffer);
                                String result=new String(buffer,0,read);
                                //由于子线程不允许做UI更新操作,与要通过Handler进行和主线程的通信操作
                                Message msg=new Message();
                                msg.what=1;
                                handler.sendMessage(msg);

                            }else{
                                Message msg=new Message();
                                msg.what=-1;
                                handler.sendMessage(msg);
                            }
                        } catch (MalformedURLException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }

                    }
                }).start();
百度网友9bd8d02
2018-06-29 · 超过28用户采纳过TA的回答
知道答主
回答量:73
采纳率:100%
帮助的人:39.4万
展开全部
基本上就是get,post
或者直接ftp上传数据
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式