最近学习Android访问网络资源的相关知识,然后实现了一个简单的手机号码归属地功能,特此记录一下。
一、主界面Activity实现
主界面的编写很简单,只是添加了一个EditText用于输入电话号码,一个Button点击查询按钮和一个TextView用于显示查询结果,这里不再赘述。直接看主界面的代码:
public class ActivityPhonePlace extends AppCompatActivity {
private EditText etPhoneNum; //输入电话号码的输入框
private Button btnFindPhonePlace; //点击查询电话号码归属地
private TextView tvShowPhonePlace; //号码归属地显示
//用于在新线程查询到结果之后,通知主线程更新界面
private Handler phoneHandler = new Handler() {
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0x000:
Phone phone = (Phone) msg.obj;
showInfo(phone);
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_phone_place);
init();//初始化界面组件
//点击查询手机号码的归属地
btnFindPhonePlace.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//查找手机号码的归属地涉及到网络请求,而自从android4.0之后,不允许在主线程中进行网络请求
new Thread(new Runnable() {
@Override
public void run() {
//获取输入的电话号码
String phoneNum=etPhoneNum.getText().toString().trim();
if(TextUtils.isEmpty(phoneNum)){
System.out.println("输入的电话号码为空");
}else {
try {
Phone phone=PhonePlaceUtils.parsePhone(phoneNum);
//查找到号码归属地之后,发送消息让主线程更新界面
Message message=Message.obtain();
message.what=0x000;
message.obj=phone;
phoneHandler.sendMessage(message);
}