2012-03-13 128 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