MainActivity.java代码
public class MainActivity extends Activity {
private EditText et_number;
private TextView tv_info;
private MobileService service;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
et_number = (EditText) findViewById(R.id.et_number);
tv_info = (TextView) findViewById(R.id.info);
//
service = new MobileService();
}
//查询事件
public void query(View v){
String number = et_number.getText().toString();
if(TextUtils.isEmpty(number)){
Toast.makeText(this, "号码不能为空", 1).show();
}else{
try {
//查询返回信息
String info = service.query(number);
if(info == null){
Toast.makeText(this, "查询归属地失败", 1).show();
}else{
tv_info.setText(info);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Toast.makeText(this, "查询归属地失败", 1).show();
}
}
}
}
public class MobileService {
//查询电话号码归属
public String query(String number) throws Exception {
String path = "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx";
URL url = new URL(path);
//1.打开连接并设置连接超时时间和请求方式
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setRequestMethod("POST");
//2获得soap文件并将string替换number
String xml = getXml();
xml = xml.replace("string", number);
byte [] entity = xml.getBytes();
//3.允许连接输出
conn.setDoOutput(true);
//4.设置请求属性(httpheader)
conn.setRequestProperty("Content-Type", "application/soap+xml; charset=utf-8");
conn.setRequestProperty("Content-Length", entity.length+"");
//5.获得输出对象,并输出数据
OutputStream os = conn.getOutputStream();
os.write(entity);
os.close();
//6.判断是否请求成功,若成功则返回查询信息
if(conn.getResponseCode()==200){
InputStream is = conn.getInputStream();
String info = parserXml(is);
return info;
}
return null;
}
//解析xml文件,获取查询信息
private String parserXml(InputStream is) throws XmlPullParserException, IOException {
XmlPullParser parser = Xml.newPullParser();
parser.setInput(is,"UTF-8");
int eventtype = parser.getEventType();
while(eventtype!=XmlPullParser.END_DOCUMENT){
switch(eventtype){
case XmlPullParser.START_TAG:
if("getMobileCodeInfoResult".equals(parser.getName())){
return parser.nextText();
}
break;
default :
break;
}
eventtype = parser.next();
}
return null;
}
private String getXml() throws IOException {
InputStream is = getClass().getClassLoader().getResourceAsStream("soap.xml");
ByteArrayOutputStream os = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while((len=is.read(buffer))!=-1){
os.write(buffer,0,len);
}
String xml = os.toString();
os.close();
is.close();
return xml;
}
}
3.xml布局文件略
4.AndroidManifest.xml文件部分内容
<uses-sdk android:minSdkVersion="8"/>
<uses-permission android:name="android.permission.INTERNET"/>
注:Android:minSdkVersion=“8”,若是真机调试,则一定是8,(比8低的版本我没试过),否则获取不了互联网的数据。同时最好不要加上android:targetSdkVersion=“”;有可能在真机测试不了(模拟器可以),我就是因为加了这个,模拟器可以获取网络数据,而真机获取数据失败,我搞了半天才发现。具体是为什么?我也不知道。英文好的可以去找google看看。