文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

kotlin实现快递与号码归属地查询案例详解

2023-02-16 12:03

关注

一.快递查询开发

此效果展示:

1.新建CourierActivity,编写界面交互代码:

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:padding="10dp"
    tools:context=".ui.CourierActivity">
    <EditText
        android:id="@+id/et_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/text_courier_company"
        android:text="zto"/>
    <EditText
        android:id="@+id/et_number"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/text_courier_number"
        android:text="416688878066"/>
    <Button
        android:id="@+id/btn_get_courier"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/button_bg"
        android:text="查询"
        android:textColor="@android:color/white"/>
    <ListView
        android:id="@+id/mListView"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:scrollbars="none"
        android:layout_weight="1"/>
</LinearLayout>

2.编写Kotlin界面交互代码:

package com.zrc.smartbutler.ui
import android.os.Bundle
import android.text.TextUtils
import android.widget.Toast
import com.kymjs.rxvolley.RxVolley
import com.kymjs.rxvolley.client.HttpCallback
import com.zrc.smartbutler.R
import com.zrc.smartbutler.adapter.CourierAdapter
import com.zrc.smartbutler.entity.CourierData
import com.zrc.smartbutler.utils.L
import kotlinx.android.synthetic.main.activity_courier.*
import org.json.JSONException
import org.json.JSONObject
import java.util.*
import kotlin.collections.ArrayList
// 快递查询
class CourierActivity : BaseActivty() {
     var mList = ArrayList<CourierData>()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_courier)
        back()
        initView();
    }
    private fun initView() {
        //查询
        btn_get_courier.setOnClickListener {
            
            //1.获取输入框的内容
            val name = et_name.text.trim()
            val number = et_number.text.trim()
            //拼接URL
            val url = "http://10.0.2.2/abc.json"
            //2.判断是否为空
            if(!TextUtils.isEmpty(name) and !TextUtils.isEmpty(number)){
                //3.拿到数据去请求数据(Json)
                RxVolley.get(url, object : HttpCallback() {
                    override fun onSuccess(t: String) {
                        //Toast.makeText(, t, Toast.LENGTH_SHORT).show();
                        L().i("Courier:$t")
                        //4.解析Json
                        parsingJson(t)
                    }
                })
            }else{
                Toast.makeText(this,"输入框不能为空",Toast.LENGTH_SHORT).show()
            }
        }
    }
    //解析数据
    private fun parsingJson(t: String) {
        try {
            val jsonObject = JSONObject(t)
            val jsonResult = jsonObject.getJSONObject("result")
            val jsonArray = jsonResult.getJSONArray("list")
            for (i in 0 until jsonArray.length()) {
                val json = jsonArray[i] as JSONObject
                val data = CourierData()
                data.setRemark(json.getString("remark"))
                data.setZone(json.getString("zone"))
                data.setDatetime(json.getString("datetime"))
                mList.add(data)
            }
            //倒序
            Collections.reverse(mList)
            L().i("Courier:$mList")
            val adapter = CourierAdapter(this, R.layout.layout_courier_item,mList)
            mListView.adapter = adapter
        } catch (e: JSONException) {
            e.printStackTrace()
        }
    }
}

由于快递查询免费次数耗尽,所以制作本地接口,作为演示。

具体操作步骤在上面代码注释中,已经很明确,在这就不过多赘述,下面附上适配器和布局代码。

拿到数据去请求数据(JSON)

RxVolley.get(url, object : HttpCallback() {
                    override fun onSuccess(t: String) {
                        //Toast.makeText(, t, Toast.LENGTH_SHORT).show();
                        L().i("Courier:$t")
                        //4.解析Json
                        parsingJson(t)
                    }
                })

ListView适配器:

package com.zrc.smartbutler.adapter

import android.app.Activity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.TextView
import com.zrc.smartbutler.R
import com.zrc.smartbutler.entity.CourierData
class CourierAdapter(activity:Activity, val resourceId:Int,mList: List<CourierData>) : ArrayAdapter<CourierData>(activity,resourceId,mList){
    override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
        val view:View
        val viewHolder:ViewHolder
        if(convertView==null){
            view = LayoutInflater.from(context).inflate(resourceId,parent,false)
            val tv_remark:TextView = view.findViewById(R.id.tv_remark)
            val tv_zone:TextView = view.findViewById(R.id.tv_zone)
            val tv_datetime:TextView = view.findViewById(R.id.tv_datetime)
            viewHolder = ViewHolder(tv_remark,tv_zone,tv_datetime)
            view.tag = viewHolder
        }else{
            view = convertView
            viewHolder = view.tag as ViewHolder
        }
        val fruit = getItem(position)
        if(fruit!=null){
            viewHolder.tv_remark.text = fruit.getRemark()
            viewHolder.tv_zone.text = fruit.getZone()
            viewHolder.tv_datetime.text = fruit.getDatetime()
        }
        return view
    }
    inner class ViewHolder(val tv_remark:TextView,val tv_zone:TextView,val tv_datetime:TextView)
}

layout_courier_item布局:

<?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>

至此,快递查询开发完成!!!

二.号码地查询开发

效果展示:

1.新建PhoneActivity,编写xml代码

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:padding="10dp"
    tools:context=".ui.PhoneActivity">
    <EditText
        android:id="@+id/et_number"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/text_input_phone"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:gravity="center"
        android:orientation="vertical">
        <ImageView
            android:id="@+id/iv_company"
            android:layout_width="200dp"
            android:layout_height="100dp"
            android:padding="30dp"/>
        <TextView
            android:gravity="center"
            android:id="@+id/tv_result"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/colorPrimaryDark"
            android:textSize="20sp"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical">
        <!--第一行-->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:orientation="horizontal">
            <Button
                android:id="@+id/btn_1"
                android:textSize="20sp"
                android:text="1"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"/>
            <Button
                android:id="@+id/btn_2"
                android:textSize="20sp"
                android:text="2"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"/>
            <Button
                android:id="@+id/btn_3"
                android:textSize="20sp"
                android:text="3"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"/>
            <Button
                android:id="@+id/btn_del"
                android:textSize="20sp"
                android:text="DEL"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"/>
        </LinearLayout>
        <!--第二行-->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:orientation="horizontal">
            <Button
                android:id="@+id/btn_4"
                android:textSize="20sp"
                android:text="4"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"/>
            <Button
                android:id="@+id/btn_5"
                android:textSize="20sp"
                android:text="5"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"/>
            <Button
                android:id="@+id/btn_6"
                android:textSize="20sp"
                android:text="6"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"/>
            <Button
                android:id="@+id/btn_0"
                android:textSize="20sp"
                android:text="0"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"/>
        </LinearLayout>
        <!--第三行-->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:orientation="horizontal">
            <Button
                android:id="@+id/btn_7"
                android:textSize="20sp"
                android:text="7"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"/>
            <Button
                android:id="@+id/btn_8"
                android:textSize="20sp"
                android:text="8"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"/>
            <Button
                android:id="@+id/btn_9"
                android:textSize="20sp"
                android:text="9"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"/>
            <Button
                android:id="@+id/btn_query"
                android:textSize="20sp"
                android:text="@string/text_query"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"/>
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

2.编写kotlin交互代码:

package com.zrc.smartbutler.ui
import android.os.Bundle
import android.text.TextUtils
import android.view.View
import android.widget.Button
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.kymjs.rxvolley.RxVolley
import com.kymjs.rxvolley.client.HttpCallback
import com.zrc.smartbutler.R
import com.zrc.smartbutler.utils.L
import com.zrc.smartbutler.utils.StaticClass
import kotlinx.android.synthetic.main.activity_phone.*
import org.json.JSONException
import org.json.JSONObject
class PhoneActivity : BaseActivty() ,View.OnClickListener{
    //标记位
    private var flag = false
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_phone)
        back()
        initView()
    }
    private fun initView() {
        btn_0.setOnClickListener(this)
        btn_1.setOnClickListener(this)
        btn_2.setOnClickListener(this)
        btn_3.setOnClickListener(this)
        btn_4.setOnClickListener(this)
        btn_5.setOnClickListener(this)
        btn_6.setOnClickListener(this)
        btn_7.setOnClickListener(this)
        btn_8.setOnClickListener(this)
        btn_9.setOnClickListener(this)
        btn_query.setOnClickListener(this)
        btn_del.setOnClickListener(this)
        //长按事件
        btn_del.setOnLongClickListener {
            et_number.setText("")
            false
        }
    }
    //点击事件
    
    override fun onClick(v: View?) {
        //获取到输入框的内容
        var str = et_number.text.toString()
        when (v!!.id) {
            R.id.btn_0, R.id.btn_1, R.id.btn_2, R.id.btn_3, R.id.btn_4, R.id.btn_5, R.id.btn_6, R.id.btn_7, R.id.btn_8, R.id.btn_9 -> {
                if (flag) {
                    flag = false
                    str = ""
                    et_number.setText("")
                }
                //每次结尾添加1
                et_number.setText(str + (v as Button).text)
                //移动光标
                et_number.setSelection(str.length + 1)
            }
            R.id.btn_del -> if (!TextUtils.isEmpty(str) && str.length > 0) {
                //每次结尾减去1
                et_number.setText(str.substring(0, str.length - 1))
                //移动光标
                et_number.setSelection(str.length - 1)
            }
            R.id.btn_query -> if (!TextUtils.isEmpty(str)) {
                getPhone(str)
            }
        }
    }
    //获取归属地
    private fun getPhone(str: String) {
        val url =
            "http://apis.juhe.cn/mobile/get?phone=" + str + "&key=" + StaticClass().PHONE_KEY
        RxVolley.get(url, object : HttpCallback() {
            override fun onSuccess(t: String) {
                //Toast.makeText(this@PhoneActivity, "结果:" + t, Toast.LENGTH_SHORT).show();
                L().i("phone:$t")
                parsingJson(t)
            }
        })
    }
    
    //解析Json
    private fun parsingJson(t: String) {
        try {
            val jsonObject = JSONObject(t)
            val jsonResult = jsonObject.getJSONObject("result")
            val province = jsonResult.getString("province")
            val city = jsonResult.getString("city")
            val areacode = jsonResult.getString("areacode")
            val zip = jsonResult.getString("zip")
            val company = jsonResult.getString("company")
            val card = jsonResult.getString("card")
            tv_result.text = """
                归属地:$province$city
                区号:$areacode
                邮编:$zip
                运营商:$company
                类型:$card
                """.trimIndent()
            when (company) {
                "移动" -> iv_company.setBackgroundResource(R.drawable.china_mobile)
                "联通" -> iv_company.setBackgroundResource(R.drawable.china_unicom)
                "电信" -> iv_company.setBackgroundResource(R.drawable.china_telecom)
            }
            flag = true
        } catch (e: JSONException) {
            e.printStackTrace()
        }
    }
}

具体代码内容不再赘述,注释中已经写的很详细了!!!

至此,号码地查询完成!!!

快递及号码地查询完成,下篇文章将针对语音机器人聊天进行开发,欢迎关注后续更新!!!

到此这篇关于kotlin实现快递与号码归属地查询案例详解的文章就介绍到这了,更多相关kotlin快递查询内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯