首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

android 调用webservice有关问题

2012-09-08 
android 调用webservice问题问题如下面代码中所述,执行到conn.getOutputStream().write(content.getBytes(

android 调用webservice问题
问题如下面代码中所述,执行到conn.getOutputStream().write(content.getBytes());//出错了 抛出networkonmainthreadexception异常 请问大侠们是怎么回事啊


代码如下:InputStream in = NumberService.class.getResourceAsStream("mobilesoap.xml");  
  byte[] data = StreamUtil.load(in);  
  String content = new String(data);  
  content = content.replace("$number", number);  
   
  // 创建连接对象, 设置请求头, 按照Webservice服务端提供的要求来设置  
  URL url = new URL("http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx");  
  HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
  conn.setConnectTimeout(5000);  
  conn.setRequestProperty("Host", "webservice.webxml.com.cn"); 
  //conn.setRequestProperty("Content-type", "application/x-java-serialized-object");
  conn.setRequestProperty("Content-Type", "application/soap+xml; charset=utf-8");  
  conn.setRequestProperty("Content-Length", content.getBytes().length + "");  
  conn.setRequestMethod("POST");  
  conn.setUseCaches(false);
  // 输出数据  
  conn.setDoOutput(true); 
  conn.setDoInput(true);
  //conn.connect();
   
  conn.getOutputStream().write(content.getBytes());//出错了 抛出networkonmainthreadexception异常  
  conn.getOutputStream().flush();
  conn.getOutputStream().close();

   
// // 获取服务端传回的数据, 解析XML, 得到结果  
  XmlPullParser parser = Xml.newPullParser();  
  parser.setInput(conn.getInputStream(), "UTF-8");  
   
  for (int type = parser.getEventType();type!=XmlPullParser.END_DOCUMENT;type=parser.next())  
  if(type==XmlPullParser.START_TAG&&parser.getName().equals("getMobileCodeInfoResult")){  
  return parser.nextText();  
  }  
  return "没有找到此号码";

[解决办法]
NetworkOnMainThreadException
提示你不要在主线程中访问网络。

把要访问的网络单独放在一个线程中:

new Thread(){
@Override
public void run()
{
//把你上面那段网络访问的代码放在这里
}
}.start();


[解决办法]
如果是临时测试不是最终发布版本可以通过去掉strictMode来解决
办法是在oncreate中使用如下代码

Java code
public void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();    StrictMode.setThreadPolicy(policy);  } 

热点排行