首页 > 代码库 > 使用AFinal框架实现HTTP请求从网络获取手机号归属地

使用AFinal框架实现HTTP请求从网络获取手机号归属地

关于AFinal框架的介绍与使用,请点击左侧相关文章分类,进行了解,本篇文章不再进行赘述。

本篇文章主要是使用AFinal框架,实现一个简单的,从网络获取手机归属地的功能,给新手介绍如何使用这个框架,完成与服务器之间的交互。

首先,我们介绍一下我们需要用到的网络接口。

http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx

上面这个网址是一个WebService的网站,主要功能是对外提供WebService服务。


我们主要使用下面这个服务,就是根据手机号获取归属地等信息。

点击进入之后,我们可以看到这个界面

这里,我们可以看到我们如果想调用这个服务,我们需要传递的参数和返回值等信息。

我们需要传递两个参数,mobileCode是手机号,至少7位,userId是商业用户的id,我们不需要传值。

返回值按照省份、城市、手机卡类型的方式返回,格式为xml。

放下看,我们可以发现这一段代码



这一段是采用SOAP协议调用这个接口的时候,我们的数据方式和返回值的格式,因为我们这次不采用这种方式,所以可以暂时不用太关注,我们需要重点关注的是下面的这段


在这一段里面,定义了我们采用GET和POST两种方式访问这个接口的请求格式和数据的返回值

了解了这些信息之后,我们就可以进行代码的编写了。


首先,看我们的布局文件,非常简单

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="10dp" >

    <EditText
        android:id="@+id/et_number"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="电话号码" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="getInfo"
        android:text="获取归属地信息" />

    <TextView
        android:id="@+id/tv_info"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textColor="@android:color/holo_blue_light"
        android:textSize="20sp" />

</LinearLayout>



下面是代码实现,因为使用的是AFinal框架,所以如果对这部分有疑问,还请自己查阅左边文章分类

/**
 * 获取手机归属地
 */
public class MainActivity extends FinalActivity {

	@ViewInject(id = R.id.tv_info)
	private TextView tv_info;
	@ViewInject(id = R.id.et_number)
	private EditText et_number;

	private FinalHttp http;
	private Context mContext;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mContext = this;
		http = new FinalHttp();
	}

	//按钮的点击事件
	public void getInfo(View v) {
		requestByPost();
	}

	// 根据get方式获取
	private void requestByGet() {
		String number = et_number.getText().toString().trim();
		String url = "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo";
		if (number.isEmpty()) {
			Toast.makeText(mContext, "请填写手机号", Toast.LENGTH_SHORT).show();
		} else {
			AjaxParams params = new AjaxParams();
			params.put("mobileCode", number);
			params.put("userID", "");
			http.get(url, params, new AjaxCallBack<String>() {

				@Override
				public void onSuccess(String t) {
					super.onSuccess(t);
					tv_info.setText(t);
				}

				@Override
				public void onFailure(Throwable t, int errorNo, String strMsg) {
					super.onFailure(t, errorNo, strMsg);
					tv_info.setText("错误码:" + errorNo + "错误信息:" + strMsg);
				}

			});

		}
	}

	// 根据post方式获取
	private void requestByPost() {
		String number = et_number.getText().toString().trim();
		String url = "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo";
		if (number.isEmpty()) {
			Toast.makeText(mContext, "请填写手机号", Toast.LENGTH_SHORT).show();
		} else {
			AjaxParams params = new AjaxParams();
			params.put("mobileCode", number);
			params.put("userID", "");
			http.post(url, params, new AjaxCallBack<String>() {

				@Override
				public void onSuccess(String t) {
					super.onSuccess(t);
					tv_info.setText(t);
				}

				@Override
				public void onFailure(Throwable t, int errorNo, String strMsg) {
					super.onFailure(t, errorNo, strMsg);
					tv_info.setText("错误码:" + errorNo + "错误信息:" + strMsg);
				}

			});

		}
	}

}

上面的请求地址,需要在

/WebServices/MobileCodeWS.asmx/getMobileCodeInfo

这个地址前面,加上主机名,也就是http://webservice.webxml.com.cn/


运行结果



当然,我们还需要对返回的xml进行解析,具体如何实现,请查阅左边文章分类中的“XML文件的解析”