2012-04-05 9 views
4

MySQLデータベースから特定のデータを取得する際に、Androidのパラメータの値を渡して、この値をクエリのPHPスクリプトで読み込みデータ。アンドロイドとMYSQLデータベース間の接続からヌル値が返されました

アプリケーションを実行すると、返された結果の値がnullであるため、データの解析エラーが発生しますか?

なぜ結果がnullですか? 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(); 
     ?> 

BLOCKQUOTE

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

答えて

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

感謝をretrivingまたは複数のデータれ@VolkerKちょっと感謝私はそれを使用することができます:) – user

1

a)スクリプトはsql injectionsになりやすいです。 $ _REQUEST [...]パラメータは、SQLクエリ文字列に入れる前に適切にエンコードする必要があります。
b)エラー処理が必要です。 mysql_ *関数のいずれかが失敗し、スクリプトがそれらのエラー状態を処理しなければなりません。クライアントはいくつかのjsonデータがエラーメッセージ/コードを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クライアントは、例えばのようなオブジェクトリテラルを受けるべき参照、application/jsonContent-typeヘッダを設定することをお勧めします
C)

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

または

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

おかげで、PHP – user

+0

の新しいIAM以来の役に立つの私を助けるため – Rizvan

関連する問題