2012-04-05 72 views
4

我想从我的MySQL数据库检索特定的数据,通过传递来自Android的参数的值,然后在查询中的PHP脚本中读取此值以便返回数据。从android和MYSQL数据库连接返回的空值

当我运行应用程序时发生错误解析数据异常,因为返回的结果值为空?

为什么结果为空?是来自PHP脚本还是来自我的java代码的错误?

请帮我

在此先感谢!

city.php:

<?php 
    mysql_connect("localhost","username","password"); 
    mysql_select_db("Countries"); 
    $sql=mysql_query("select City_Population from City where Name= "'.$_REQUEST['Name']."'"); 
    while($row=mysql_fetch_assoc($sql)) 
    $output[]=$row; 
     print(json_encode($output)); 
     mysql_close(); 
     ?> 

块引用

java类:

 public class ConnectActivity extends ListActivity { 

      String add="http://10.0.2.2/city.php"; 
      public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 

      new Connect().execute(); 

     } 

    private class Connect extends AsyncTask<Void,Void,String> 
    {  
      private String result = ""; 
      private InputStream is=null; 
      private String city_name="London"; 
      protected String doInBackground(Void... params) { 
      try 
      { 
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
       nameValuePairs.add(new BasicNameValuePair("Name",city_name)); 
       HttpClient httpclient = new DefaultHttpClient(); 
       HttpPost httppost = new HttpPost(add); 
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
       HttpResponse response = httpclient.execute(httppost); 
       HttpEntity entity = response.getEntity(); 
       is = entity.getContent(); 
       } 
     catch(Exception e) 
      { 
       Log.e("log_tag", "Error in http connection "+e.toString()); 
       } 


      //convert response to string 
    try{ 
    BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8"),8); 
    StringBuilder sb = new StringBuilder(); 
    String line = null; 
    while ((line = reader.readLine()) != null) { 
     sb.append(line + "\n"); 
     } 
     is.close(); 
     result=sb.toString(); 
      } 
      catch(Exception e){ 
      Log.e("log_tag", "Error converting result "+e.toString()); 
       } 


      return result; 
      } 
     protected void onPostExecute(String result){ 

     try{ 
      JSONArray jArray = new JSONArray(result); 
      JSONObject json_data=null; 
      for(int i=0;i<jArray.length();i++) 
      { 
       json_data = jArray.getJSONObject(i); 
       int population=json_data.getInt("City_Population"); 

       TextView City_Name =(TextView)findViewById(R.id.city_name); 
                      TextView City_population=(TextView)findViewById(R.id.city_pop); 
          City_Name.setText(json_data.getString(city_name)); 
                      City_population.setText(population+" "); 
      } 
      } 
      catch(JSONException e){ 
      Log.e("log_tag", "Error parsing data "+e.toString()); 
      } 


        } 
                    } 

                } 
+1

听u能告诉我在mysql中,City_Population是帮助我的工作 – Rizvan 2012-04-05 09:28:59

回答

2
 <?php 
     $name=$_POST['NAME'];    
     mysql_connect("localhost","username","password"); 
     mysql_select_db("Countries"); 
     $sql=mysql_query("select City_Population as citypop from City where Name='$name' "); 
     while($row=mysql_fetch_assoc($sql)) 
      $output=$row['citypop']; 
     print(json_encode($output)); 
     mysql_close(); 
     ?> 

你试试这个确定它会工作。

+0

感谢,因为其新的IAM在PHP – user 2012-04-05 19:08:42

1

a)您的脚本容易出现sql injections。在将它放入sql查询字符串之前,您需要正确编码$ _REQUEST [...]参数。
b)你需要一些错误处理。任何mysql_ *函数都可能失败,您的脚本必须处理这些错误情况。由于客户端期望某些json数据只是将错误消息/代码作为json编码数组返回。
c)你可能需要将Content-type头设置为application/json,看到RFC 4627http://docs.php.net/function.header

<?php 
define('DEBUG_DETAILS', true); 
function onError($msg, $details) { 
    $msg = array(
     'status'=>'error', 
     'message'=>$msg 
    ); 
    if (defined('DEBUG_DETAILS') && DEBUG_DETAILS) { 
     $msg['details'] = $details; 
    } 
    die(json_encode($msg)); 
} 


$mysql = mysql_connect("localhost","username","password") or OnError('database connection failed', mysql_error()); 
mysql_select_db("Countries", $mysql) or OnError('database selection failed', mysql_error($mysql)); 

$query = " 
    SELECT 
     City_Population 
    FROM 
     City 
    WHERE 
     Name='%s' 
"; 
$query = sprintf($query, mysql_real_escape_string($_REQUEST['Name'], $mysql)); 
$sql=mysql_query($query, $mysql) or OnError('query failed', array('query'=>$query, 'errstr'=>mysql_error($mysql))); 

$output = array(
    'count'=>0, 
    'records'=>array() 
); 
while($row=mysql_fetch_assoc($sql)) { 
    $output['records'][]=$row; 
    $output['count']+=1; 
} 
echo json_encode(array(
    'status'=>'ok', 
    'result'=>$output 
)); 

你的Android客户端应接收对象文本象例如

{ 
    status:"ok", 
    result: { 
    'count': 2, 
    'records': [ 10000, 15000] 
    } 
} 

{ 
    status:"error", 
    message: "database connection failed", 
    setails: "...." 
} 
+0

感谢retriving或多个数据 – user 2012-04-05 19:02:44

+0

@VolkerK嘿感谢有帮助我可以使用它:) – Rizvan 2012-04-07 08:49:32