2013/05/08

Android Post方式與網頁溝通

Android沒辦法直接與資料庫做連結,據說是安全性問題?必須透過中介去跟資料庫做傳遞資料
但是最近要用,所以就想到那不如直接將資料丟到網頁,由網頁幫我轉發資料。順便練一下最不熟悉的網頁語言…

不過建議先搞懂Post和Get,可以參考這篇『HTTP POST GET 本质区别详解




HttpPost httpPost = new HttpPost("http://192.168.1.1/test.php");
        List<NameValuePair> list = new ArrayList<NameValuePair>();
        list.add(new BasicNameValuePair("Name", "Value"));
        try {
            httpPost.setEntity(new UrlEncodedFormEntity(list, HTTP.UTF_8));
            HttpResponse httpResponse = new DefaultHttpClient()
                    .execute(httpPost);
            if (httpResponse.getStatusLine().getStatusCode() == 200) {
                String result = EntityUtils.toString(httpResponse.getEntity());
                return result;
            }
        } catch (UnsupportedEncodingException e) {
            Log.i("UnsupportedEncodingException", e.toString());
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
            Log.i("ClientProtocolException", e.toString());
        } catch (IOException e) {
            e.printStackTrace();
            Log.i("IOException", e.toString());
        }


<?php
 echo $_POST['account'];
 echo "12345";
?>

這些程式碼主要是透過HttpPost去建立連結伺服器的位址
用Post傳遞是給資料值之外還要給名稱?不給的話可能分辨不出來到底是要給誰的
所以我們就必須建立一個清單,並且紀錄下每一個名稱對應的值
在設定HttpPost所要傳送的編碼及資料
使用HttpResponse來直接發送,發送完後可以取得一個狀態碼

不知道狀態碼的人可以參考『WIKIPEDIA的List of HTTP status codes 』,200就是成功的送出資料了

接著我們可以透過『EntityUtils.toString("Entity")的方式將回傳的訊息顯示出來,以利Debug


參考資料:
http://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/NameValuePair.html
http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
http://blog.csdn.net/gideal_wang/article/details/4316691
http://www.tutorialspoint.com/android/android_php_mysql.htm