日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android快递单号查询快递状态信息

發布時間:2024/3/26 Android 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android快递单号查询快递状态信息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

辛苦堆砌,轉載請注明出處,謝謝!

今天介紹一個自己做的快遞單號查詢的簡單APP,供大家參考。由于需要使用http和json,本文在build.gradle(module:app)添加了okhttp3依賴和gson依賴。

dependencies {compile fileTree(include: ['*.jar'], dir: 'libs')androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {exclude group: 'com.android.support', module: 'support-annotations'})compile 'com.android.support:appcompat-v7:24.1.1'testCompile 'junit:junit:4.12'compile 'com.squareup.okhttp3:okhttp:3.6.0'compile 'com.google.code.gson:gson:2.2.4' } 看一下布局文件

<?xml version="1.0" encoding="utf-8"?> <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:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"android:orientation="vertical"tools:context="com.yjp.deliverynoquerydemo.MainActivity"><Spinnerandroid:id="@+id/delivery_company_spinner"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"android:entries="@array/delivery_company"/><EditTextandroid:id="@+id/delivery_no_edit_text"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"android:hint="@string/please_enter_delivery_no"android:inputType="number"/><Buttonandroid:id="@+id/query_button"android:layout_gravity="center"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="5dp"android:text="@string/query"/><ListViewandroid:id="@+id/messages_list_view"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="5dp"android:listSelector="@android:color/transparent"/> </LinearLayout>

ListView使用的item的布局

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/time_text_view"android:layout_width="match_parent"android:layout_height="wrap_content"android:textStyle="bold"android:textAppearance="?android:textAppearanceMedium"android:typeface="monospace"/><TextViewandroid:id="@+id/context_text_view"android:layout_width="match_parent"android:layout_height="50dp"android:textAppearance="?android:textAppearanceSmall"android:typeface="monospace"/></LinearLayout> 資源文件,首先是strings.xml

<resources><string name="app_name">快遞查詢</string><string name="please_enter_delivery_no">請輸入快遞單號</string><string name="query">查詢</string><string name="query_url">http://www.kuaidi100.com/query</string> </resources> 這里我們使用了快遞100的接口,然后看看arrays.xml

<?xml version="1.0" encoding="utf-8"?> <resources><string-array name="delivery_company"><item>順豐</item><item>EMS</item><item>快捷</item></string-array><string-array name="delivery_company_id"><item>shunfeng</item><item>ems</item><item>kuaijiesudi</item></string-array> </resources> 只做了3個快遞公司的查詢,還有很多其他的支持,界面如圖所示

下面看看代碼,我們自定義一個Application類,主要通過資源,使用表驅動法動態構建一個快遞公司中文名與請求時候的公司編碼的映射表。

package com.yjp.deliverynoquerydemo.global;import android.app.Application;import com.yjp.deliverynoquerydemo.R;import java.util.HashMap; import java.util.Map;public class MyApplication extends Application {private Map<String, String> mDeliveryCompanyTable = new HashMap<>();public String getDeliveryCompanyNo(String deliveryCompanyName) throws RuntimeException {if (mDeliveryCompanyTable.isEmpty()) {String[] names = getResources().getStringArray(R.array.delivery_company);String[] ids = getResources().getStringArray(R.array.delivery_company_id);if (names.length != ids.length) {throw new RuntimeException();}for (int i = 0; i < names.length; i++) {mDeliveryCompanyTable.put(names[i], ids[i]);}}return mDeliveryCompanyTable.get(deliveryCompanyName);} } 然后是模型,用來記錄獲取回來的快遞狀態信息

package com.yjp.deliverynoquerydemo.modal;import java.util.List;public class DeliveryMessages {//派送單號private String nu;//快遞公司名稱private String com;//快遞信息private List<Message> data;//消息類public static class Message {//時間,格式為年-月-日 時:分:秒private String time;//詳細信息內容private String context;public String getTime() {return time;}public void setTime(String time) {this.time = time;}public String getContext() {return context;}public void setContext(String context) {this.context = context;}}public String getNu() {return nu;}public void setNu(String nu) {this.nu = nu;}public String getCom() {return com;}public void setCom(String com) {this.com = com;}public List<Message> getData() {return data;}public void setData(List<Message> data) {this.data = data;} } 一個用來通過http獲取快遞信息的工具類,這里我們使用了okHttp3和gson

package com.yjp.deliverynoquerydemo.tools;import com.google.gson.Gson; import com.yjp.deliverynoquerydemo.modal.DeliveryMessages;import java.io.IOException; import java.net.SocketTimeoutException; import java.util.Map; import java.util.concurrent.TimeUnit;import okhttp3.Call; import okhttp3.Callback; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response;public class DeliveryMessageGetter {//異步請求監聽接口public interface DeliveryMessageGetterListener {void onSuccess(DeliveryMessages deliveryMessages);void onFailure(String errorStr);}//okHttpprivate OkHttpClient mOkHttpClient = new OkHttpClient.Builder().readTimeout(10, TimeUnit.SECONDS).writeTimeout(10, TimeUnit.SECONDS).connectTimeout(10, TimeUnit.SECONDS).build();//異步GET請求public void getAsync(final String url,final Map<String, String> params,final DeliveryMessageGetterListener listener) {//構建請求URLString requestString = url;if (!params.isEmpty()) {requestString += "?";for (Map.Entry<String, String> entry : params.entrySet()) {requestString += entry.getKey() + "=" + entry.getValue() + "&";}requestString = requestString.substring(0, requestString.length() - 1);}//創建一個Requestfinal Request request = new Request.Builder().url(requestString).build();//請求加入調度Call call = mOkHttpClient.newCall(request);call.enqueue(new Callback() {@Overridepublic void onFailure(Call call, IOException e) {if(e.getCause().equals(SocketTimeoutException.class)) {listener.onFailure("查詢超時");} else {listener.onFailure("查詢失敗");}}@Overridepublic void onResponse(Call call, Response response) throws IOException {String messages = response.body().string();Gson gson = new Gson();DeliveryMessages deliveryMessages = gson.fromJson(messages, DeliveryMessages.class);if (deliveryMessages != null) {listener.onSuccess(deliveryMessages);} else {listener.onFailure("查詢失敗");}}});}} 最后是我們的MainActivity

package com.yjp.deliverynoquerydemo;import android.app.ProgressDialog; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Spinner; import android.widget.Toast;import com.yjp.deliverynoquerydemo.global.MyApplication; import com.yjp.deliverynoquerydemo.modal.DeliveryMessages; import com.yjp.deliverynoquerydemo.tools.DeliveryMessageGetter;import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;import static com.yjp.deliverynoquerydemo.modal.DeliveryMessages.Message;public class MainActivity extends AppCompatActivity implements DeliveryMessageGetter.DeliveryMessageGetterListener {private List<Map<String, String>> mQueryData = new ArrayList<>();private SimpleAdapter mQueryAdapter;private Spinner mDeliveryCompanySpinner;private EditText mDeliveryNoEditText;private ProgressDialog mQueryWaitDialog;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mDeliveryCompanySpinner = (Spinner) findViewById(R.id.delivery_company_spinner);mDeliveryNoEditText = (EditText) findViewById(R.id.delivery_no_edit_text);Button queryButton = (Button) findViewById(R.id.query_button);ListView messagesListView = (ListView) findViewById(R.id.messages_list_view);queryButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//沒有輸入快遞單號if (0 == mDeliveryNoEditText.getText().length()) {Toast.makeText(MainActivity.this, "請輸入快遞單號", Toast.LENGTH_SHORT).show();return;}//創建ProgressDialog對象mQueryWaitDialog = new ProgressDialog(MainActivity.this);mQueryWaitDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);mQueryWaitDialog.setMessage("正在查詢...");mQueryWaitDialog.show();//準備請求參數int selectedPosition = mDeliveryCompanySpinner.getSelectedItemPosition();String deliveryCompanyName =getResources().getStringArray(R.array.delivery_company)[selectedPosition];Map<String, String> params = new HashMap<>();params.put("type",((MyApplication)getApplication()).getDeliveryCompanyNo(deliveryCompanyName));params.put("postid", mDeliveryNoEditText.getText().toString());//清空數據mQueryData.clear();//發送請求DeliveryMessageGetter getter = new DeliveryMessageGetter();getter.getAsync(getResources().getString(R.string.query_url),params, MainActivity.this);}});mQueryAdapter = new SimpleAdapter(this,mQueryData,R.layout.query_list_item_layout,new String[] {"time", "context"},new int[] {R.id.time_text_view, R.id.context_text_view});messagesListView.setAdapter(mQueryAdapter);}@Overridepublic void onSuccess(DeliveryMessages deliveryMessages) {List<Message> messages = deliveryMessages.getData();for (Message message : messages) {Map<String, String> map = new HashMap<>();map.put("time", message.getTime());map.put("context", message.getContext());mQueryData.add(map);}queryComplete("查詢完成");}@Overridepublic void onFailure(String errorStr) {final String hint = errorStr;queryComplete("查詢失敗");}private void queryComplete(final String toast) {MainActivity.this.runOnUiThread(new Runnable() {@Overridepublic void run() {mQueryAdapter.notifyDataSetChanged();mQueryWaitDialog.dismiss();Toast.makeText(MainActivity.this, toast, Toast.LENGTH_SHORT).show();}});} } 主要是調用接口,實現功能,代碼比較好理解,不再贅述。最后給出Manifest文件

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.yjp.deliverynoquerydemo"><uses-permission android:name="android.permission.INTERNET" /><applicationandroid:name=".global.MyApplication"android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"android:windowSoftInputMode="stateHidden"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

主要是替換了默認的Application類,然后讓MainActivity默認不彈出軟鍵盤。








總結

以上是生活随笔為你收集整理的Android快递单号查询快递状态信息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。