首页 > 代码库 > 使用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文件的解析”