萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 網路程式設計 >> PHP 程式設計

PHP 與 Android 客戶端 HTTP 互動實作:查詢介面完整範例

架構概覽

Android 端發送 HTTP GET 請求 → PHP 端接收參數查詢 MySQL → 回傳 JSON → Android 解析顯示。

PHP 伺服器端 (CodeIgniter 風格)

function getids() {
    $this->output->set_header('Content-Type: application/json; charset=utf-8');
    $jsonstr = '';

    $pname = $this->input->get('name');
    $pcallid = $this->input->get('callid');
    $pworkid = $this->input->get('workid');

    $this->load->model('wireid_model');
    $this->wireid_model->insertonly($pname, $pcallid);

    if (empty($pname) && empty($pcallid) && empty($pworkid)) {
        exit;
    }

    $sql = "SELECT * FROM twireid WHERE 1=1";
    if ($pname) $sql .= " AND GNAME='{$pname}'";
    elseif ($pcallid) $sql .= " AND GOLDCALLID='{$pcallid}'";
    elseif ($pworkid) $sql .= " AND GCARDID='{$pworkid}'";

    $data = $this->wireid_model->getsql($sql);
    // JSON_FORCE_OBJECT 避免空陣列輸出為 []
    echo json_encode($data->result_array(), JSON_FORCE_OBJECT);
}

Android 端核心程式碼 (Java)

Runnable doAskTask = new Runnable() {
    @Override public void run() {
        String ggname = etname.getText().toString();
        String ggworkid = etworkid.getText().toString();
        String ggcallid = etcallid.getText().toString();

        String baseUrl = ConfidDatas.askbaseurl;
        String query = "name=" + ggname + "&callid=" + ggcallid + "&workid=" + ggworkid;

        HttpGet httpGet = new HttpGet(baseUrl + query);
        HttpResponse response = null;
        try {
            response = new DefaultHttpClient().execute(httpGet);
        } catch (Exception e) {
            e.printStackTrace();
        }

        Message msg = new Message();
        Bundle data = new Bundle();

        if (response != null && response.getStatusLine().getStatusCode() == 200) {
            try {
                String result = EntityUtils.toString(response.getEntity());
                data.putString("value", result);
                data.putString("result", "isok");
            } catch (Exception e) {
                data.putString("result", "iserr");
            }
        } else {
            data.putString("result", "iserr");
        }
        msg.setData(data);
        handler.sendMessage(msg);
    }
};

// 在 UI 執行緒啟動
new Thread(doAskTask).start();

關鍵注意事項

  • 網路請求必須在子執行緒,否則 Android 4.0+ 拋出 NetworkOnMainThreadException。
  • 使用 Handler 將結果傳回主執行緒更新 UI。
  • PHP 端務必設定 Content-Type: application/json; charset=utf-8,避免中文亂碼。
  • 生產環境建議改用 OkHttp / Retrofit 替代預設 HttpClient(已棄用)。
  • 參數需做 URLEncoder.encode() 防止特殊字元錯誤。
  • 資料庫查詢請使用參數化預處理,防止 SQL 注入。
copyright © 萬盛學電腦網 all rights reserved