android中通过GET方法接收数据并通过xml解析数据,POST方法向服务器提交数据

最近在做一个项目的登录及注册,由于是菜鸟,所以在网上找了很多与服务器交互的方法,但很多时候都有点不太靠谱,于是经过一周和小伙伴的研究之后终于做出结果,所以将他给大家分享出来。

一、POST方法提交数据:

相对于GET方法提交数据,POST方法保密性更好,而且不用害怕出现中文传递给服务器上出现乱码,还得转换格式,再加上GET方法提交的数据相对有限,而POST方法一般无限制,因此我用的是POST方法来给大家展示android端如何向服务器提交数据。 


//得到编辑框中的内容
final String userPhone=username1.getText().toString().trim();
final String userPwd=password1.getText().toString().trim();
//网络操作线程
new Thread(new Runnable() {
    @Override
    public void run() {
        HttpURLConnection connection=null;
        try {
            //服务器对应的IP地址及端口
            URL url=new URL("http://192.168.191.1:8088/WorryHousekeeping/ValidateUserLogin.android");
            //打开HttpURLConnection
            connection=(HttpURLConnection)url.openConnection();
            //请求方式为POST
            connection.setRequestMethod("POST");
            //设置请求超时时间
            connection.setConnectTimeout(8000);
            //定义输出流
            OutputStream out=connection.getOutputStream();
            //你需要输出的数据
            String data="userPhone="+userPhone+"&userPwd="+userPwd;
            //输出数据,并转化为字节型式
            out.write(data.getBytes());
            //读取服务器的响应,通过UTF-8格式读取,因为服务器的中文格式为UTF-8
            BufferedReader reader=new BufferedReader(new InputStreamReader(connection.getInputStream(),"utf-8"));
            String str="";
            //对服务器的响应做出不同的处理方式,由于android中不能在子线程改变UI,所以通过handler进行转换
            while ((str=reader.readLine())!=null){
                Log.e("MainActivity",str);
                //注意str为服务器的响应,因此str必须与服务器端的响应结果是相同的
                if (str.equals("没有该用户")){
                    Message msg=new Message();
                    msg.what=0x000;
                    handler.sendMessage(msg);
                }else if (str.equals("密码错误")){
                    Message msg=new Message();
                    msg.what=0x001;
                    handler.sendMessage(msg);
                }else{
                    //登陆成功跳转页面,服务器会返还一个xml或者其他文件,通过xml解析得到数据
                    Intent intent=new Intent(MainActivity.this,Main2Activity.class);
                    startActivity(intent);
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {

        }
    }
}).start();

这里我们定义了一个Handler来将得到的数据发送到UI界面上,由于android规定无法在子线程中进行UI操作


Handler handler=new Handler(){
    @Override
    public void handleMessage(Message msg) {
        if (msg.what==0x123){
            text2.append(msg.obj.toString()+"\n");
        }else if (msg.what==0x000){
            Toast.makeText(MainActivity.this,"没有该用户",Toast.LENGTH_SHORT).show();
        }else if (msg.what==0x001){
            Toast.makeText(MainActivity.this,"密码错误",Toast.LENGTH_SHORT).show();
        }
    }
};
大家注意,所有的ID一定要和服务器上的ID保持一致,还有IP地址及端口号也要确定是否正确

二、GET方法得到服务器数据并xml解析:

//网络线程
new Thread(new Runnable() {
    @Override
    public void run() {
        HttpURLConnection connection=null;
        BufferedReader reader=null;
        String u="http://192.168.191.1:8088/WorryHousekeeping/UsersToAndroid.android";
        //从服务器拿出的数据
        Integer id=0;
        String name="";
        String phone="";
        int sex=0;
        Integer age=0;
        String adress="";
        String manner="";
        try{
            //服务器对应的IP地址及端口
            URL url=new URL(u);
            //打开HttpURLConnection
            connection=(HttpURLConnection)url.openConnection();
            //请求方式为GET
            connection.setRequestMethod("GET");
            //网络超时限制
            connection.setConnectTimeout(8000);
            //读取数据超时限制
            connection.setReadTimeout(8000);
            //如果服务器响应
            if (connection.getResponseCode()==200) {
                //得到服务器的数据
                InputStream in = connection.getInputStream();
                //xml格式解析数据
                XmlPullParser parse = Xml.newPullParser();
                //解析in中的数据,格式位utf-8
                parse.setInput(in, "UTF-8");
                //定义事件为解析事件
                int event = parse.getEventType();
                //如果解析事件不等于xml解析数据的结尾
                while (event != XmlPullParser.END_DOCUMENT) {
                    switch (event) {
                        //当解析到数据的开头时,执行以下语句
                        case XmlPullParser.START_TAG: {
                            //id为根节点,其余为子节点
                            if ("id".equals(parse.getName())) {
                                id = Integer.parseInt(parse.getAttributeValue(0));
                            } else if ("name".equals(parse.getName())) {
                                name = parse.nextText();
                            } else if ("phone".equals(parse.getName())) {
                                phone = parse.nextText();
                            } else if ("sex".equals(parse.getName())) {
                                sex = Integer.parseInt(parse.nextText());
                            } else if ("age".equals(parse.getName())) {
                                age = Integer.parseInt(parse.nextText());
                            } else if ("address".equals(parse.getName())) {
                                adress = parse.nextText();
                            }else if ("manner".equals(parse.getName())) {
                                manner = parse.nextText();
                            }
                            break;
                        }
                        case XmlPullParser.END_TAG: {
                            Log.e("MainActivity",adress);
                            String sex1="";
                            if (sex==0){
                                sex1="";
                            }else {
                                sex1="";
                            }
                            //将解析后的数据通过handler发送到ui线程中去
                            Message msg=new Message();
                            msg.what=0x123;
                            msg.obj="您的id"+id+"\n"+"您的姓名为"+name+"\n"
                                    +"您的手机号为"+phone+"\n"+"您的性别为"+sex1+"\n"+"您的年龄为"+age+"\n"+
                                    "您的地址为"+adress+"\n"+"您的manner"+manner;
                            handler.sendMessage(msg);
                            break;

                        }
                        default:
                            break;
                    }
                    event=parse.next();
                }
            }

        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if (reader!=null){
                try {
                    reader.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        }
    }
}).start();
同样,也是一个Handler显示数据,当然由于这次得到的数据进行字符分割,分别显示在不同的地方,不过由于这次主要介绍GET方法,所以就不这样做了,字符串分割什么的可以去看看JAVA书就行了,挺简单的

//定义全局变量

String s="";
Handler handler=new Handler(){
    @Override
    public void handleMessage(Message msg) {
        if (msg.what==0x123){
            s=msg.obj.toString();
            text.setText(s);
        }
    }
};
好了,这样的话就能将数据解析并显示


总结:android端的介绍只有这些,服务器端的其实并不难,做服务器的可以在网上搜索一下,这里我就不给大家分享了,毕竟我也只是学习路上的一只菜鸟,喜欢与大家分享,谢谢大家

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值