2012-04-05 7 views
4

Ich versuche, bestimmte Daten aus meiner MySQL-Datenbank abrufen, indem Sie den Wert des Parameters von Android übergeben und dann diesen Wert in einem PHP-Skript in der Abfrage lesen, um zurückzukehren die Daten.Null-Wert von der Verbindung zwischen Android und MYSQL-Datenbank

Beim Ausführen der Anwendung tritt eine Fehleranalyse-Datenausnahme auf, weil der zurückgegebene Ergebniswert null ist?

Warum ist das Ergebnis null? Ist der Fehler vom PHP-Skript oder von meinem Java-Code?

bitte helfen Sie mir

Vielen Dank im Voraus!

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-Klasse:

 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

anhören kann mir in mysql sagen, ist City_Population retriving oder mehrere Daten – Rizvan

Antwort

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(); 
     ?> 

Sie versuchen dies sicher, es wird funktionieren.

+0

Dank für mich – user

1

a) Ihr Skript ist anfällig für . Sie müssen den Parameter $ _REQUEST [...] richtig codieren, bevor Sie ihn in die SQL-Abfragezeichenfolge einfügen.
b) Sie benötigen eine Fehlerbehandlung. Jede der mysql_ * -Funktionen kann fehlschlagen und Ihr Skript muss diese Fehlerbedingungen behandeln. Da der Client einige JSON-Daten erwartet, geben Sie die Fehlermeldung/den Code auch als JSON-kodiertes Array zurück.
c) Sie könnten die Content-type Header application/json einstellen möchten, sehen RFC 4627 und http://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 
)); 

Ihr Android-Client wörtlichen ein Objekt erhalten sollte wie z.B.

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

oder

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

dank seiner Arbeit zu helfen, ihre hilfreich, da iam neu in php – user

+0

@VolkerK Hey danke Ich kann es benutzen :) – Rizvan

Verwandte Themen