最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android實(shí)現(xiàn)快遞單號(hào)查詢快遞狀態(tài)信息

 更新時(shí)間:2018年05月16日 14:56:49   作者:我的天空 我的夢(mèng)  
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)快遞單號(hào)查詢快遞狀態(tài)信息,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

今天介紹一個(gè)自己做的快遞單號(hào)查詢的簡(jiǎn)單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"> 
 
 <Spinner 
  android:id="@+id/delivery_company_spinner" 
  android:layout_width="match_parent" 
  android:layout_height="wrap_content" 
  android:layout_margin="5dp" 
  android:entries="@array/delivery_company"/> 
 
 <EditText 
  android: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"/> 
 
 <Button 
  android: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"/> 
 
 <ListView 
  android: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"> 
 
 <TextView 
  android: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"/> 
 
 <TextView 
  android: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">請(qǐng)輸入快遞單號(hào)</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個(gè)快遞公司的查詢,還有很多其他的支持,界面如圖所示


下面看看代碼,我們自定義一個(gè)Application類,主要通過(guò)資源,使用表驅(qū)動(dòng)法動(dòng)態(tài)構(gòu)建一個(gè)快遞公司中文名與請(qǐng)求時(shí)候的公司編碼的映射表。

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); 
 } 
} 

然后是模型,用來(lái)記錄獲取回來(lái)的快遞狀態(tài)信息

package com.yjp.deliverynoquerydemo.modal; 
 
import java.util.List; 
 
public class DeliveryMessages { 
 
 //派送單號(hào) 
 private String nu; 
 
 //快遞公司名稱 
 private String com; 
 
 //快遞信息 
 private List<Message> data; 
 
 //消息類 
 public static class Message { 
 
  //時(shí)間,格式為年-月-日 時(shí):分:秒 
  private String time; 
 
  //詳細(xì)信息內(nèi)容 
  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; 
 } 
} 

一個(gè)用來(lái)通過(guò)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 { 
 
 //異步請(qǐng)求監(jiān)聽(tīng)接口 
 public interface DeliveryMessageGetterListener { 
  void onSuccess(DeliveryMessages deliveryMessages); 
  void onFailure(String errorStr); 
 } 
 
 //okHttp 
 private OkHttpClient mOkHttpClient = new OkHttpClient.Builder() 
   .readTimeout(10, TimeUnit.SECONDS) 
   .writeTimeout(10, TimeUnit.SECONDS) 
   .connectTimeout(10, TimeUnit.SECONDS) 
   .build(); 
 
 //異步GET請(qǐng)求 
 public void getAsync(final String url, 
       final Map<String, String> params, 
       final DeliveryMessageGetterListener listener) { 
 
  //構(gòu)建請(qǐng)求URL 
  String 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); 
  } 
 
  //創(chuàng)建一個(gè)Request 
  final Request request = new Request.Builder() 
    .url(requestString) 
    .build(); 
 
  //請(qǐng)求加入調(diào)度 
  Call call = mOkHttpClient.newCall(request); 
  call.enqueue(new Callback() { 
   @Override 
   public void onFailure(Call call, IOException e) { 
    if(e.getCause().equals(SocketTimeoutException.class)) { 
     listener.onFailure("查詢超時(shí)"); 
    } else { 
     listener.onFailure("查詢失敗"); 
    } 
   } 
 
   @Override 
   public 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; 
 
 @Override 
 protected 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() { 
   @Override 
   public void onClick(View v) { 
 
    //沒(méi)有輸入快遞單號(hào) 
    if (0 == mDeliveryNoEditText.getText().length()) { 
     Toast.makeText(MainActivity.this, "請(qǐng)輸入快遞單號(hào)", Toast.LENGTH_SHORT).show(); 
     return; 
    } 
 
    //創(chuàng)建ProgressDialog對(duì)象 
    mQueryWaitDialog = new ProgressDialog(MainActivity.this); 
    mQueryWaitDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
    mQueryWaitDialog.setMessage("正在查詢..."); 
    mQueryWaitDialog.show(); 
 
    //準(zhǔn)備請(qǐng)求參數(shù) 
    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()); 
 
    //清空數(shù)據(jù) 
    mQueryData.clear(); 
 
    //發(fā)送請(qǐng)求 
    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); 
 } 
 
 @Override 
 public 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("查詢完成"); 
 } 
 
 @Override 
 public void onFailure(String errorStr) { 
  final String hint = errorStr; 
  queryComplete("查詢失敗"); 
 } 
 
 private void queryComplete(final String toast) { 
  MainActivity.this.runOnUiThread(new Runnable() { 
   @Override 
   public void run() { 
    mQueryAdapter.notifyDataSetChanged(); 
    mQueryWaitDialog.dismiss(); 
    Toast.makeText(MainActivity.this, toast, Toast.LENGTH_SHORT).show(); 
   } 
  }); 
 } 
} 

主要是調(diào)用接口,實(shí)現(xiàn)功能,代碼比較好理解,不再贅述。最后給出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" /> 
 
 <application 
  android: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> 

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android中BroadcastReceiver案例講解

    Android中BroadcastReceiver案例講解

    今天小編就為大家分享一篇關(guān)于Android中BroadcastReceiver案例講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • Android開(kāi)發(fā)從相機(jī)或相冊(cè)獲取圖片裁剪

    Android開(kāi)發(fā)從相機(jī)或相冊(cè)獲取圖片裁剪

    當(dāng)我們需要上傳圖片時(shí),想要裁剪成我們需要的尺寸大小,android手機(jī)都帶有這個(gè)功能,很容易,那么此功能是如何實(shí)現(xiàn)的呢?下面小編給大家介紹Android開(kāi)發(fā)從相機(jī)或相冊(cè)獲取圖片裁剪,需要的朋友可以參考下
    2015-10-10
  • android使用RxJava實(shí)現(xiàn)預(yù)加載

    android使用RxJava實(shí)現(xiàn)預(yù)加載

    這篇文章主要為大家詳細(xì)介紹了android使用RxJava實(shí)現(xiàn)預(yù)加載的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Android自定義AvatarImageView實(shí)現(xiàn)頭像顯示效果

    Android自定義AvatarImageView實(shí)現(xiàn)頭像顯示效果

    這篇文章主要為大家詳細(xì)介紹了Android自定義AvatarImageView實(shí)現(xiàn)頭像顯示效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Android異常處理最佳實(shí)踐

    Android異常處理最佳實(shí)踐

    這篇文章主要為大家詳細(xì)介紹了Android異常處理最佳實(shí)踐,介紹了一個(gè)優(yōu)秀的app異常處理機(jī)制包括什么,感興趣的小伙伴們可以參考一下
    2016-03-03
  • android studio節(jié)省C盤空間的配置方法

    android studio節(jié)省C盤空間的配置方法

    這篇文章主要介紹了android studio節(jié)省C盤空間的配置方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-07-07
  • 詳解如何使用Android Studio 進(jìn)行NDK開(kāi)發(fā)和調(diào)試

    詳解如何使用Android Studio 進(jìn)行NDK開(kāi)發(fā)和調(diào)試

    本篇文章主要介紹了詳解如何使用Android Studio 進(jìn)行NDK開(kāi)發(fā)和調(diào)試,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • Android編程之重力感應(yīng)用法分析

    Android編程之重力感應(yīng)用法分析

    這篇文章主要介紹了Android編程之重力感應(yīng)用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了重力感應(yīng)的原理、相關(guān)概念與實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-10-10
  • Android自定義View實(shí)現(xiàn)餅狀圖帶動(dòng)畫(huà)效果

    Android自定義View實(shí)現(xiàn)餅狀圖帶動(dòng)畫(huà)效果

    這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)餅狀圖帶動(dòng)畫(huà)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • android編程開(kāi)發(fā)之全屏和退出全屏的實(shí)現(xiàn)方法

    android編程開(kāi)發(fā)之全屏和退出全屏的實(shí)現(xiàn)方法

    這篇文章主要介紹了android編程開(kāi)發(fā)之全屏和退出全屏的實(shí)現(xiàn)方法,以實(shí)例形式較為詳細(xì)的分析了Android全屏及退出全屏的頁(yè)面布局與功能實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11

最新評(píng)論

新疆| 克山县| 新沂市| 滦南县| 利津县| 德清县| 龙山县| 丰顺县| 自贡市| 定州市| 玛纳斯县| 肇源县| 盐山县| 盐城市| 阜新| 迭部县| 麻栗坡县| 巴中市| 南皮县| 高州市| 正镶白旗| 临夏县| 尼玛县| 曲沃县| 巴南区| 建瓯市| 景东| 靖远县| 丹巴县| 卢龙县| 三门县| 湛江市| 靖宇县| 利津县| 都江堰市| 横峰县| 镇沅| 乾安县| 嵊州市| 上饶县| 武汉市|