在Android開發(fā)中,PHP作為服務(wù)端腳本語言,可以為Android提供諸如數(shù)據(jù)查詢、保存等功能。如果你正在開發(fā)一個需要與服務(wù)端交互的Android應(yīng)用,那么本文將會為你介紹如何使用Android接收PHP的數(shù)據(jù)和信息。
首先,我們需要明確一點:在Android應(yīng)用中,一般使用HttpURLConnection類或者HttpClient類來處理網(wǎng)絡(luò)請求。這里,我們以HttpURLConnection類為例。首先,需要使用HttpURLConnection對象連接到PHP服務(wù)端,代碼如下:
URL url=new URL("http://www.sample.com/sample.php"); HttpURLConnection conn=(HttpURLConnection)url.openConnection(); conn.setConnectTimeout(5000); conn.setRequestMethod("POST");在上述代碼中,我們首先定義了連接的URL地址,然后使用HttpURLConnection類對象conn打開了這個URL,并設(shè)置了連接超時時間為5秒。最后,我們將請求方式設(shè)置為POST。 接下來,我們需要向PHP服務(wù)器發(fā)送數(shù)據(jù)和信息。常見的發(fā)送方式有兩種:URL編碼和JSON格式。URL編碼是一種將數(shù)據(jù)編碼成URL中傳送的格式,使用最為廣泛。JSON格式則更多用于數(shù)據(jù)結(jié)構(gòu)較為復(fù)雜的情況下。1. 使用URL編碼
String content="username="+URLEncoder.encode("小李","UTF-8")+"&password="+URLEncoder.encode("123456","UTF-8"); conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); conn.setRequestProperty("Content-Length",String.valueOf(content.length())); DataOutputStream dos=new DataOutputStream(conn.getOutputStream()); dos.writeBytes(content);在上述代碼中,我們首先將需要發(fā)送的數(shù)據(jù)按照"key1=value1&key2=value2"的格式進行編碼,并使用setRequestProperty方法在請求頭中添加了Content-Type和Content-Length兩個屬性。最后,我們使用DataOutputStream對象將編碼后的字符串content發(fā)送出去。2. 使用JSON格式
JSONObject jsonObject=new JSONObject(); jsonObject.put("username","小李"); jsonObject.put("password","123456"); String content=jsonObject.toString(); conn.setRequestProperty("Content-Type","application/json"); conn.setRequestProperty("Content-Length",String.valueOf(content.length())); DataOutputStream dos=new DataOutputStream(conn.getOutputStream()); dos.writeBytes(content);在上述代碼中,我們先使用JSONObject對象構(gòu)造了一個JSON格式的字符串,然后與使用URL編碼方式一樣,設(shè)置Content-Type和Content-Length屬性,最后發(fā)送json字符串到服務(wù)器中。 當碼已經(jīng)發(fā)送到服務(wù)器后,我們可以通過getResponseCode()方法獲取php服務(wù)器返回的狀態(tài)碼。如果返回碼為200,表明請求成功。此時,我們可以通過輸入流獲取php的返回數(shù)據(jù):1. 獲取PHP返回數(shù)據(jù)(使用InputStream)
InputStream is=conn.getInputStream(); BufferedReader br=new BufferedReader(new InputStreamReader(is)); String line=null; StringBuilder sb=new StringBuilder(); while((line=br.readLine())!=null){ sb.append(line); } result=sb.toString();在上述代碼中,我們首先通過連接對象conn獲取服務(wù)器的數(shù)據(jù)輸入流,然后使用BufferedReader對象以行為單位讀取輸入流中的數(shù)據(jù),并存儲到StringBuilder對象sb中。最后,我們將StringBuilder對象轉(zhuǎn)換為字符串。2. 獲取PHP返回數(shù)據(jù)(使用HttpURLConnection)
if(conn.getResponseCode()==HttpURLConnection.HTTP_OK){ InputStream is=conn.getInputStream(); result= StreamUtil.readStream(is); }在上述代碼中,我們判斷服務(wù)器返回的狀態(tài)碼是否為200,如果是200,我們可以使用StreamUtil.readStream(InputStream is)方法快速讀取服務(wù)器返回數(shù)據(jù)。 總結(jié)一下,在使用Android接收PHP數(shù)據(jù)時,我們需要先使用HttpURLConnection類向PHP服務(wù)器發(fā)送請求,并將數(shù)據(jù)發(fā)送到服務(wù)器。一般常見的數(shù)據(jù)格式為URL編碼和JSON格式。服務(wù)器接收到請求并處理后,將最終結(jié)果以字符串的形式返回給Android應(yīng)用。此時,我們可以使用輸入流獲取服務(wù)器返回的結(jié)果,并進行進一步處理和顯示。