发送xml数据和调用webservice

刚开始学习安卓,对照视频在Android Studio平台下练习项目,实现手机号码归属地查询。过程中遇到两个问题:

一:找不到资源文件

视频讲解是在eclipse平台,资源文件直接放到src根下面就可以。而我把资源文件soap12.xml放到java根路径下,以及放到当前包下,死活得不到文件,提示inStream为null。如下:

InputStream inStream = AddressService.class.getClassLoader().getResourceAsStream("soap12.xml"); //AddressService为自定义的业务类

不知道是不是类加载器的使用方式问题还是路径问题。

把soap12.xml文件放到res/raw下,换成以下方法来获取,结果成功:

InputStream inStream = context.getResources().openRawResource(R.raw.soap12);

需要说明的是,getResource()是Activity的函数,若自定义的类没有继承Activity的话就无法使用该API,故需要建一个构造器,然后把Activity传给该类。


二:请求网络数据不成功

原来的代码:

//        HttpURLConnection conn = (HttpURLConnection) new URL(path).openConnection();
//        conn.setConnectTimeout(5000);
//        conn.setRequestMethod("POST");
//        conn.setDoOutput(true);
//        conn.setRequestProperty("Content-Type", "application/soap+xml; charset=utf-8");
//        conn.setRequestProperty("Content-Length", String.valueOf(entity.length));
//        conn.getOutputStream().write(entity);
//        if(conn.getResponseCode() == 200){
//            return parseSOAP(conn.getInputStream());
//        }
//        return null;
修改后的代码:   
new Thread(new Runnable(){ public void run() {
    try{
        HttpURLConnection conn = (HttpURLConnection) new URL(path).openConnection();
        conn.setConnectTimeout(5000);
        conn.setRequestMethod("POST");
        conn.setDoOutput(true);
        conn.setRequestProperty("Content-Type", "application/soap+xml; charset=utf-8");
        conn.setRequestProperty("Content-Length", String.valueOf(entity.length));
        conn.getOutputStream().write(entity);
        if(conn.getResponseCode() == 200){
           final String str =  parseSOAP(conn.getInputStream());
            result = str;
        }
    }catch(Exception e){
        e.printStackTrace();
    }
}}).start();
return result;
   //以上代码放到线程里面就可以了!

视频讲解同样请求非本机上的网络数据,没有放到线程里面就成功了。不知道为什么,以后请求网路资源就重开一个线程好了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值