当前位置: 代码迷 >> Web前端 >> Android调用webservice兑现 手机号码归属地查询
  详细解决方案

Android调用webservice兑现 手机号码归属地查询

热度:3147   发布时间:2013-02-26 00:00:00.0
Android调用webservice实现 手机号码归属地查询

MobileInfoService.java

package cn.itcast.service;import java.io.InputStream;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.URL;import java.util.HashMap;import java.util.Map;import java.util.regex.Matcher;import java.util.regex.Pattern;import org.xmlpull.v1.XmlPullParser;import android.util.Xml;import cn.itcast.utils.StreamTool;public class MobileInfoService {		private static String readSoapFile(InputStream inStream, String mobile) throws Exception{		byte[] data = StreamTool.readInputStream(inStream);		String soapxml = new String(data);		Map<String, String> params = new HashMap<String, String>();		params.put("mobile", mobile);		return replace(soapxml, params);	}		public static String replace(String xml, Map<String, String> params)throws Exception{		String result = xml;		if(params!=null && !params.isEmpty()){			for(Map.Entry<String, String> entry : params.entrySet()){				String name = "\\$"+ entry.getKey();				Pattern pattern = Pattern.compile(name);				Matcher matcher = pattern.matcher(result);				if(matcher.find()){					result = matcher.replaceAll(entry.getValue());				}			}		}		return result;	}	public static String getMobileAddress(InputStream inStream, String mobile)throws Exception{		String soap = readSoapFile(inStream, mobile);		byte[] data = soap.getBytes();		URL url = new URL("http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx");		HttpURLConnection conn = (HttpURLConnection)url.openConnection();		conn.setRequestMethod("POST");		conn.setConnectTimeout(5 * 1000);		conn.setDoOutput(true);//如果通过post提交数据,必须设置允许对外输出数据		conn.setRequestProperty("Content-Type", "application/soap+xml; charset=utf-8");		conn.setRequestProperty("Content-Length", String.valueOf(data.length));		OutputStream outStream = conn.getOutputStream();		outStream.write(data);		outStream.flush();		outStream.close();		if(conn.getResponseCode()==200){			return parseResponseXML(conn.getInputStream());		}		return null;	}	private static String parseResponseXML(InputStream inStream) throws Exception{		XmlPullParser parser = Xml.newPullParser();		parser.setInput(inStream, "UTF-8");		int eventType = parser.getEventType();//产生第一个事件		while(eventType!=XmlPullParser.END_DOCUMENT){//只要不是文档结束事件			switch (eventType) {				case XmlPullParser.START_TAG:				String name = parser.getName();//获取解析器当前指向的元素的名称				if("getMobileCodeInfoResult".equals(name)){					return parser.nextText();				}				break;			}			eventType = parser.next();		}		return null;	}}


MainActivity.java

package cn.itcast.mobile.address;import java.io.InputStream;import cn.itcast.service.MobileInfoService;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity {    private EditText mobileText;    private TextView addressView;    private static final String TAG = "MainActivity";        @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                mobileText = (EditText)this.findViewById(R.id.mobile);        addressView = (TextView)this.findViewById(R.id.address);        Button button = (Button)this.findViewById(R.id.button);        button.setOnClickListener(new View.OnClickListener() {						@Override			public void onClick(View v) {				String mobile = mobileText.getText().toString();				InputStream inStream = this.getClass().getClassLoader().getResourceAsStream("mobilesoap.xml");				try {					addressView.setText(MobileInfoService.getMobileAddress(inStream, mobile));				} catch (Exception e) {					Log.e(TAG, e.toString());					Toast.makeText(MainActivity.this, "查询失败", 1).show();				}			}		});    }}


 

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    >    <TextView      android:layout_width="fill_parent"     android:layout_height="wrap_content"     android:text="@string/mobile"    />        <EditText     android:layout_width="fill_parent"     android:layout_height="wrap_content"     android:id="@+id/mobile"    />        <Button     android:layout_width="wrap_content"     android:layout_height="wrap_content"     android:text="@string/button"    android:id="@+id/button"    />        <TextView      android:layout_width="fill_parent"     android:layout_height="wrap_content"     android:id="@+id/address"    /></LinearLayout>


 项目源码:下载

  相关解决方案