问题如下面代码中所述,执行到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 "没有找到此号码";
代码如下: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 "没有找到此号码";
解决方案 »
- android PopupWindow小问题
- 自己开发的Android程序如何正常关闭第三方程序吗?
- 改变gridview颜色
- 如何快速的在/src下添加一个Android 格式的java文件?
- android图片高效解码方法
- 如何切换回程序主Activity时让其自动重新创建调用oncreate()方法?
- 怎么给Android系统设置默认视频播放器 求代码
- android程序可以开发直接打内线号码吗?
- Android请求C# WebService问题
- 打开android studio 报错求大牛解救
- SIM5218+android上网会断开连接的问题
- android 通过ksoap2调取.net wcf的问题
提示你不要在主线程中访问网络。把要访问的网络单独放在一个线程中:new Thread(){
@Override
public void run()
{
//把你上面那段网络访问的代码放在这里
}
}.start();
办法是在oncreate中使用如下代码
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);
}
最终的解决办法还是通过线程来请求网络数据,给你一个使用asyncTask的例子public void downloadHtml(View view) throws IOException{
DownloadHtmlTask task = new DownloadHtmlTask();
task.execute(new String[] { "http://www.bcoder.com" });
}
private class DownloadHtmlTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String response = "";
InputStream in = null;
for (String url : urls) {
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
try {
URL urlget = new URL(url);
HttpURLConnection conn = (HttpURLConnection)urlget.openConnection();
conn.connect();
in = (conn.getInputStream());
BufferedReader buffer = new BufferedReader(new InputStreamReader(in));
String s = "";
while ((s = buffer.readLine()) != null) {
response += s;
}
} catch (Exception e) {
e.printStackTrace();
}
}
return response;
}
@Override
protected void onPostExecute(String result) {
TextView textView = (TextView)findViewById(R.id.textView1);;
textView.setText(result);
}
}
代码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_quality);
ListView lv = (ListView) findViewById(R.id.quality_list_view);
String phoneNumble = null;
try {
phoneNumble = (new NumberService()).getLocation("18661870109");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.print(phoneNumble);
@Override
public void run()
{
String phoneNumble = null;
try {
phoneNumble = (new NumberService()).getLocation("18661870109");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.print(phoneNumble);
}
}.start();