Android中呼叫API實現查詢身份證資訊
阿新 • • 發佈:2019-01-02
要實現這個功能,首先就要知道如何通過Http協議訪問網路,向網路傳送請求,其次瞭解如何解析JSON或者XML檔案。
1.我的身份證查詢介面是在聚合資料申請的,完成認證後,你會得到一個KEY,這在之後會用到。
2.建立佈局檔案
<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" tools:context=".MainActivity" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <EditText android:id="@+id/input_id" android:layout_width="0dp" android:layout_weight="1" android:singleLine="true" android:hint="請輸入身份證" android:layout_height="wrap_content" /> <Button android:onClick="search" android:text="查詢" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/show_reason" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/show_area" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/show_sex" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/show_birthday" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> </LinearLayout>
MainActivity中的程式碼:
import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.EditText; import android.widget.TextView; import org.json.JSONException; import org.json.JSONObject; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; /** * 呼叫聚合資料的第三方API來實現身份證的查詢功能 */ public class MainActivity extends AppCompatActivity { //首先先為我們在xml中的按鈕初始化 private EditText input_id; TextView show_area, show_sex, show_bitrhday, show_reason; //設定除錯用的Log public static final String LOG_TAG = MainActivity.class.getSimpleName(); //我們從API中拿到的路徑 public static final String INFO_URL = "http://apis.juhe.cn/idcard/index?cardno="; //API中的KEY public static final String INPUT_URL_M = "&dtype=json&key=62247af6b09eec4e95e40691334765fa"; //62247af6b09eec4e95e40691334765fa String area; //地區 String sex; //性別 String birthday; //生日 int resultcode; String reason; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); input_id = (EditText) findViewById(R.id.input_id); show_area = (TextView) findViewById(R.id.show_area); show_sex = (TextView) findViewById(R.id.show_sex); show_bitrhday = (TextView) findViewById(R.id.show_birthday); show_reason = (TextView) findViewById(R.id.show_reason); } public void search(View view) { makeHttpRequest(); show_area.setText(""); show_sex.setText(""); show_reason.setText(""); show_bitrhday.setText(""); } //網路連線 private void makeHttpRequest() { //開啟執行緒來發起網路請求 new Thread(new Runnable() { @Override public void run() { //初始化建立HttpURLConnection HttpURLConnection connection = null; //初始化建立BufferedReader BufferedReader reader = null; //獲取Text文字框中的值 String id = input_id.getText().toString(); try { //將我們的URL傳進來 URL url = new URL(INFO_URL + id + INPUT_URL_M); //使用URL開啟連結 connection = (HttpURLConnection) url.openConnection(); //設定網路請求方式 connection.setRequestMethod("GET"); //設定讀取時間 connection.setReadTimeout(8000); //設定連結時間 connection.setConnectTimeout(8000); //初始化建立InputStream InputStream in = connection.getInputStream(); //讀取內容資料 reader = new BufferedReader(new InputStreamReader(in)); StringBuilder response = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { response.append(line); } showResponse(response.toString()); } catch (Exception e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } if (connection != null) { connection.disconnect(); } } } }).start(); } private void showResponse(final String s) { runOnUiThread(new Runnable() { @Override public void run() { FunctionJson(s); } }); } /** * 解析JSON資料 * * @param data */ private void FunctionJson(String data) { try { JSONObject jsonObject = new JSONObject(data); resultcode = jsonObject.optInt("resultcode"); JSONObject jsonObject2 = jsonObject.getJSONObject("result"); area = jsonObject2.optString("area").toString(); sex = jsonObject2.optString("sex").toString(); birthday = jsonObject2.optString("birthday").toString(); reason = jsonObject.optString("reason").toString(); } catch (JSONException e) { e.printStackTrace(); } if (resultcode == 200) { show_area.setText("戶籍:" + area); show_sex.setText("性別:" + sex); show_bitrhday.setText("出生年月:" + birthday); show_reason.setText("查詢成功"); } else { show_reason.setText("查詢失敗,請輸入正確的身份證號"); } } }
最後我們在AndroidManifest.xml檔案中新增:
<uses-permission android:name="android.permission.INTERNET" />
到此就全部結束了