通過呼叫第三方API,查詢身份證資訊
阿新 • • 發佈:2019-02-01
//介面XML檔案 <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="wrap_content" android:layout_marginTop="30dp" android:orientation="vertical" android:padding="10dp" tools:context="com.imooc.searchforid.MainActivity" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:maxLines="1" android:text="@string/IDnum" android:textSize="20sp" /> <EditText android:id="@+id/edt_IDnum" android:layout_width="match_parent" android:layout_height="45dp" android:singleLine="true" android:background="@drawable/white_bg" android:gravity="center_vertical" android:hint="@string/tips" android:maxLines="1" /> </LinearLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:orientation="horizontal" > <Button android:id="@+id/btn_search" android:layout_width="100dp" android:layout_height="50dp" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginLeft="30dp" android:background="@drawable/orange_selector" android:text="@string/btn_search" android:textSize="25sp" /> <Button android:id="@+id/btn_clear" android:layout_width="100dp" android:layout_height="50dp" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_marginRight="30dp" android:background="@drawable/orange_selector" android:text="@string/btn_clear" android:textColor="#ff0000" android:textSize="25sp" /> </RelativeLayout> <TextView android:layout_width="match_parent" android:layout_height="5dp" android:layout_marginTop="20dp" android:background="@color/black" /> <TextView android:id="@+id/show_sex" android:layout_width="match_parent" android:layout_height="35dp" android:background="@color/gray" android:gravity="bottom" android:textColor="@color/orange" android:textSize="22sp" /> <TextView android:layout_width="match_parent" android:layout_height="5dp" android:background="@color/black" /> <TextView android:id="@+id/show_birthday" android:layout_width="match_parent" android:layout_height="35dp" android:background="@color/gray" android:gravity="bottom" android:textColor="@color/orange" android:textSize="22sp" /> <TextView android:layout_width="match_parent" android:layout_height="5dp" android:background="@color/black" /> <TextView android:id="@+id/show_address" android:layout_width="match_parent" android:layout_height="35dp" android:background="@color/gray" android:gravity="bottom" android:textColor="@color/orange" android:textSize="22sp" /> <TextView android:layout_width="match_parent" android:layout_height="5dp" android:background="@color/black" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="20dp" > <ProgressBar android:id="@+id/progressBar1" style="?android:attr/progressBarStyleLarge" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:visibility="gone" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="180dp" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever" android:focusable="true" android:focusableInTouchMode="true" android:maxLines="1" android:scrollHorizontally="true" android:singleLine="true" android:text="@string/authorInfo" android:textColor="@color/sivler" android:textSize="17sp" /> </RelativeLayout> </LinearLayout>
效果圖
//MainActivity
package com.imooc.searchforid; import java.util.regex.Matcher; import java.util.regex.Pattern; import android.app.Activity; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity implements OnClickListener { // 佈局元素 private EditText edt_IDinput; private Button btn_search, btn_clear; private TextView tv_sex, tv_birthday, tv_address; private String edtStr; private ProgressBar pb; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); edt_IDinput = (EditText) findViewById(R.id.edt_IDnum); btn_search = (Button) findViewById(R.id.btn_search); btn_clear = (Button) findViewById(R.id.btn_clear); tv_sex = (TextView) findViewById(R.id.show_sex); tv_birthday = (TextView) findViewById(R.id.show_birthday); tv_address = (TextView) findViewById(R.id.show_address); pb = (ProgressBar) findViewById(R.id.progressBar1); // 設定監聽事件 btn_search.setOnClickListener(this); btn_clear.setOnClickListener(this); } public boolean isConnected(){ ConnectivityManager manager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); NetworkInfo mInfo = manager.getActiveNetworkInfo(); if(mInfo!=null){ return mInfo.isAvailable(); }else{ return false; } } @Override public void onClick(View v) { edtStr = edt_IDinput.getText().toString(); if (v.getId() == R.id.btn_search) { if (isIDcode()) { //檢測網路及驗證 if(isConnected()){ new MyAsyncTask(tv_sex, tv_birthday, tv_address, edtStr, pb) .execute(); }else{ Toast.makeText(MainActivity.this, "網路未連線", 2500).show(); return; } } else { tv_sex.setText("請輸入正確的身份證號碼!"); tv_address.setText(""); tv_birthday.setText(""); return; } } else if (v.getId() == R.id.btn_clear) { edt_IDinput.setText(""); tv_sex.setText(""); tv_address.setText(""); tv_birthday.setText(""); } } /** * 匹配是否是正確的身份證號碼 * * @return */ private boolean isIDcode() { Pattern p = Pattern.compile("^\\d{17}\\w$"); Matcher m = p.matcher(edtStr); if (m.find()) { return true; } return false; } }
//網路載入,通過AsyncTask來實現後臺載入,呼叫的是百度API市集提供的免費API
package com.imooc.searchforid; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import org.json.JSONException; import org.json.JSONObject; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.widget.ProgressBar; import android.widget.TextView; public class MyAsyncTask extends AsyncTask<Void, Void, String> { private static String apiKey = "be2fffdb29cbf44b3777bea792a5462f"; private String httpUrl = "http://apis.baidu.com/apistore/idservice/id"; private TextView sex, birth, address; private String idCode; private ProgressBar progressBar; public static String WARNNING = "輸入的資訊有誤或無相關資料,請檢查身份證號碼"; public MyAsyncTask(TextView sex, TextView birth, TextView address, String edtStr, ProgressBar pb) { super(); this.sex = sex; this.birth = birth; this.address = address; this.idCode = edtStr; this.progressBar = pb; } @Override protected void onPreExecute() { super.onPreExecute(); progressBar.setVisibility(View.VISIBLE); } @Override protected String doInBackground(Void... params) { String str = request(httpUrl, "id=" + idCode); return str; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); json4String(result); } /** * 解析JSON資料 * * @param result */ private void json4String(String result) { String sexStr = null, addStr = null, birthStr = null; try { JSONObject jsonObj = new JSONObject(result); JSONObject jsData = jsonObj.getJSONObject("retData"); sexStr = jsData.getString("sex"); addStr = jsData.getString("address"); birthStr = jsData.getString("birthday"); // 設定文字給View setTextToView(sexStr, addStr, birthStr); } catch (JSONException e) { e.printStackTrace(); setTextToView(WARNNING," "," "); } } public void setTextToView(String sexStr, String addressStr, String birthStr) { if ("M".equals(sexStr)) { sex.setText("性別: 男"); } else if("F".equals(sexStr)){ sex.setText("性別: 女"); }else{ sex.setText(sexStr); address.setText(""); birth.setText("" ); progressBar.setVisibility(View.GONE); return; } birth.setText("出生年月:" + birthStr); // 生日 address.setText("籍貫:" + addressStr); // 籍貫 progressBar.setVisibility(View.GONE); } /** * 獲取JSON資料 * * @param httpUrl * @param httpArg * @return */ public String request(String httpUrl, String httpArg) { BufferedReader reader = null; String result = null; StringBuffer sbf = new StringBuffer(); httpUrl = httpUrl + "?" + httpArg; try { URL url = new URL(httpUrl); HttpURLConnection connection = (HttpURLConnection) url .openConnection(); connection.setRequestMethod("GET"); // 填入apikey到HTTP header connection.setRequestProperty("apikey", apiKey); connection.connect(); InputStream is = connection.getInputStream(); reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); String strRead = null; while ((strRead = reader.readLine()) != null) { sbf.append(strRead); sbf.append("\r\n"); } reader.close(); result = sbf.toString(); } catch (Exception e) { e.printStackTrace(); } return result; } }