2012-03-13 104 views
0

我在理解下面的代碼行時遇到了一些問題。究竟是什麼做的,它是如何幫助我查詢在AndroidAndroid查詢外部MySQL數據庫

$q=mysql_query("SELECT * FROM people WHERE birthyear>'".$_REQUEST['year']."'"); 
while($e=mysql_fetch_assoc($q)) 
    $output[]=$e; 
print(json_encode($output)); 

我知道初始部分的數據庫就意味着選擇表的人那裏birthyear每個記錄......

不過,我以後困惑了。我從Android使用http調用這個php函數post

ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
nameValuePairs.add(new BasicNameValuePair("year","1980")); 
HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost("http://10.0.2.2/retrieve.php"); 
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
HttpResponse response = httpclient.execute(httppost); 
HttpEntity entity = response.getEntity(); 
is = entity.getContent(); 

輸入流在哪裏。有人可以幫我嗎?

回答

1

PHP代碼查詢數據庫並構造一個JSON輸出,它發送給調用客戶端。嘗試從瀏覽器調用PHP(將URL放在地址欄中) - 然後您應該獲取JSON。

在Android方面,java代碼使用HTTPClient包裝來調用你的php並得到響應。 Socket(HTTP連接)當您調用相關方法時,InputStream由HttpClient在內部處理。從你的角度來看,你所需要做的就是處理實體的內容。

您可以打開從實體(你is變量)輸入流並從中讀取數據:

InputStream is = entity.getContent(); 

然後讀取流的內容,你通常會。你應該得到由php發送的json。

PHP從year請求參數中獲取所需最小年份的值。在android中,使用name=yearvalue=1980創建NameValuePair。此NameValuePair作爲POST參數以year=1980的形式傳遞給PHP代碼。同樣,這由HTTPClient包裝類在內部處理。然後PHP代碼讀取請求參數「year」的值以獲取查詢的最小值。

+0

我想知道的是,php代碼如何知道一年以上的值,它應該返回ID – user1092042 2012-03-13 12:31:23

+0

@ user1092042'NameValuePair'是用'name = year'和'value = 1980'創建的。該NameValuePair作爲POST參數傳遞給PHP代碼。我用一段描述這個的段落更新了我的答案。 – 2012-03-13 12:49:48

+0

謝謝,我現在明白了 – user1092042 2012-03-13 12:51:48

0

在上面的代碼中isInputStream的實例entity.getContent()返回InputStream類型的對象。在該行is = entity.getContent();是InputStream