总结
这一节实现的是快递与电话归属地的查询,需要使用智能聚合的接口,返回JSON数据,解析数据。实现归属地查询时需要实现键盘逻辑,网络框架使用RXvolly。
快递查询的实现
布局如下
当点击查询按钮时,实现以下方法:
public void onClick(View v) {
switch (v.getId()){
case R.id.search_Bu:
if (!TextUtils.isEmpty(company_ET.getText())&!TextUtils.isEmpty(no_ET.getText())){
com_name=company_ET.getText().toString();
com_no=no_ET.getText().toString();
//创建url
String url="http://v.juhe.cn/exp/index?key="+"3f2cdb21b5b3ee6a020041318072a116"+"&com="+com_name+"&no="+com_no;
RxVolley.get(url, new HttpCallback() {
@Override
public void onSuccess(String t) {
super.onSuccess(t);
parsingJson(t);
}
});
}else {
Toast.makeText(this,"请输入完整",Toast.LENGTH_LONG).show();
}
break;
}
}
//解析json
private void parsingJson(String t) {
try {
JSONObject jsonObject = new JSONObject(t);
JSONObject jsonResult = jsonObject.getJSONObject("result");
JSONArray jsonArray = jsonResult.getJSONArray("list");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject json = (JSONObject) jsonArray.get(i);
CourierData data = new CourierData();
data.setRemark(json.getString("remark"));
data.setZone(json.getString("zone"));
data.setDatetime(json.getString("datetime"));
mlist.add(data);
}
//倒序
Collections.reverse(mlist);
CourierAdapter adapter = new CourierAdapter(mlist,this);
mListView.setAdapter(adapter);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
实现适配器
CourierAdapter(BaseAdapter):
public class CourierAdapter extends BaseAdapter {
private List<CourierData> mList;
private LayoutInflater inflater;
private CourierData data;
private Context mContext;
public CourierAdapter(List mList,Context mContext) {
this.mList=mList;
this.mContext=mContext;
//实例化inflater
inflater = LayoutInflater.from(mContext);
}
@Override
public int getCount() {
return mList.size();
}
@Override
public Object getItem(int position) {
return mList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder=null;
if (convertView==null){
convertView=inflater.inflate(R.layout.adapter_item,null);
viewHolder=new ViewHolder();
viewHolder.tv_remark= (TextView) convertView.findViewById(R.id.tv_remark);
viewHolder.tv_datetime= (TextView) convertView.findViewById(R.id.tv_datetime);
viewHolder.tv_zone= (TextView) convertView.findViewById(R.id.tv_zone);
convertView.setTag(viewHolder);
}else {
viewHolder = (ViewHolder) convertView.getTag();
}
data=mList.get(position);
viewHolder.tv_remark.setText(data.getRemark());
viewHolder.tv_datetime.setText(data.getDatetime());
viewHolder.tv_zone.setText(data.getZone());
return convertView;
}
}
class ViewHolder{
public TextView tv_datetime;
public TextView tv_remark;
public TextView tv_zone;
}
时间轴样式实现:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:orientation="horizontal">
<LinearLayout
android:layout_width="60dp"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical">
<View
android:layout_width="2dp"
android:layout_height="30dp"
android:background="@color/colorPrimary" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/timeline_green" />
<View
android:layout_width="2dp"
android:layout_height="100dp"
android:background="@color/colorPrimary" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:layout_weight="1"
android:background="@drawable/timeline_content"
android:orientation="vertical"
android:padding="10dp">
<TextView
android:id="@+id/tv_remark"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:text="你的快件已经到达北京"
android:textColor="@color/colorPrimary"
android:textSize="18sp"/>
<TextView
android:id="@+id/tv_zone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp"
android:paddingLeft="10dp"
android:text="北京"
android:textColor="@color/colorAccent"
android:textSize="15sp"/>
<TextView
android:id="@+id/tv_datetime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:text="2016-11-12"/>
</LinearLayout>
</LinearLayout>
归属地查询:
布局
键盘逻辑实现 :
点击数字与DEL实现逻辑
public void onClick(View v) {
String str=phone_TV.getText().toString();
switch (v.getId()){
case R.id.button_0:
case R.id.button_1:
case R.id.button_2:
case R.id.button_3:
case R.id.button_4:
case R.id.button_5:
case R.id.button_6:
case R.id.button_7:
case R.id.button_8:
case R.id.button_9:
//当查询成功时再次输入时清空输入框,在查询成功时将tag设置为true
if(tag==true){
str="";
phone_TV.setText(str);
tag=false;
}
phone_TV.setText(str+((Button)v).getText());
//移动光标
phone_TV.setSelection(str.length() + 1);
break;
//设置DEL的清楚最后一位功能
case R.id.button_DEL:
if (!TextUtils.isEmpty(str)&str.length()>0) {
phone_TV.setText(str.substring(0, str.length() - 1));
//移动光标
phone_TV.setSelection(str.length() - 1);
}
设置DEL长按清空输入框方法:
button_DEL.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
phone_TV.setText("");
return false;
}
});
设置“查询”按键的方法:
case R.id.button_search:
phonenum="http://apis.juhe.cn/mobile/get?phone="+str+"&key=7fbf0ce17daa9a2ca31626fa7c97407b";
RxVolley.get(phonenum, new HttpCallback() {
@Override
public void onSuccess(String t) {
super.onSuccess(t);
parsingJson(t);
}
private void parsingJson(String t) {
try {
JSONObject jsonObject = new JSONObject(t);
JSONObject jsonResult=jsonObject.getJSONObject("result");
String province = jsonResult.getString("province");
String city = jsonResult.getString("city");
String areacode = jsonResult.getString("areacode");
String zip = jsonResult.getString("zip");
String company = jsonResult.getString("company");
String card = jsonResult.getString("card");
result_tv.setText("归属地:" + province + city + "\n"
+ "区号:" + areacode + "\n"
+ "邮编:" + zip + "\n"
+ "运营商:" + company + "\n"
+ "类型:" + card);
//图片显示
switch (company) {
case "移动":
com_im.setBackgroundResource(R.drawable.china_mobile);
break;
case "联通":
com_im.setBackgroundResource(R.drawable.china_unicom);
break;
case "电信":
com_im.setBackgroundResource(R.drawable.china_telecom);
break;
}
tag=true;
} catch (JSONException e) {
e.printStackTrace();
}
}