第四节总结

总结

这一节实现的是快递与电话归属地的查询,需要使用智能聚合的接口,返回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();
        }
    }






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值