2012-03-02 9 views
0

MySQLデータベースで値をチェックし、値の存在に応じて「True」または「False」を返すプログラムを実装するのに問題があります。PHPからAndroidへのBool HTTPレスポンス

<?php 
    mysql_connect("host","username","password"); 
    mysql_select_db("Deal"); 
    $sql=mysql_query("select * from CITY where CITY_NAME like 'A%'"); 
    while($row=mysql_fetch_assoc($sql)) 
    $output[]=$row; 
    print(json_encode($output)); 
    mysql_close(); 
?> 

は、私は単にチェックしたい:私は次のコードを使用して(この例では「A」でそのスタート)の値を返すためにPHPを得ることができます(それはまた、Javaログに一致する行を表示します)クエリを満たすレコード(この例では「A」で始まる1つのレコード)があるかどうかを確認し、「True」または「False」のいずれかを返してddmsログに出力します。

私は次のようなものを実装しようとしてきましたが、何も返されません。

<?php 

mysql_connect("host","username","password"); 
mysql_select_db("Deal"); 

$sql = mysql_query("select * from CITY where CITY_NAME like 'A%'") or die(mysql_error()); 
if ($sql) { 
    if(mysql_num_rows($sql) == 0) { 
      $row = "False"; 
      print(json_encode($row); 
      mysql_close(); 
    } 

    else { 
     $row = "True"; 
     //while($row = mysql_fetch_assoc($sql)) 
     //$output[]=$row; 
     print(json_encode($row); 
     //print(json_encode($output)); 
     mysql_close(); 
    } 
} 
?> 

そして、ここで私のAndroidのコードです:あなたが何か提案がありましたら

public class CityActivity extends ListActivity { 

    JSONArray jArray; 
    String result = null; 
    InputStream is = null; 
    StringBuilder sb=null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
    //http post 
    try{ 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost("http://www.example.com/example.php"); 
     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,"iso-8859-1"),8); 
      sb = new StringBuilder(); 
      sb.append(reader.readLine() + "\n"); 

      String line="0"; 
      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()); 
      } 
    //paring datag 

    try{ 
      jArray = new JSONArray(result); 
      JSONObject json_data=null; 
      for(int i=0;i<jArray.length();i++){ 
       String myString =""; 
       json_data = jArray.getJSONObject(i); 
       int ct_id = json_data.getInt("CITY_ID"); 
       String ct_name = json_data.getString("CITY_NAME"); 
       myString = Integer.toString(ct_id); 
       Log.i(ct_name, myString); 
      } 
      } 
      catch(JSONException e1){ 
       Toast.makeText(getBaseContext(), "No City Found" ,Toast.LENGTH_LONG).show(); 
      } catch (ParseException e1) { 
       e1.printStackTrace(); 
     } 
    } 
} 

、私に知らせてください。私は本当にそれを感謝します。ありがとう!

答えて

1

あなたは十分に近いですが、結果を真または偽として返すだけではありません。私は強くプレースホルダをお勧めします。 {結果:True/False}を応答として返します。 Trueでは、データを追加することができ、falseはデータを送信しません。

したがって、アンドロイド側では、常にJSONObjectを取得します。だからちょうどチェック

if (result != null && result.has("result")){ 
     if(result.optBoolean("result", false)){ 
       // Now parse and get all your data 
     }else{ 
     // If you are running is thread, then run on UI thread and show Toast 
    } 
} 
関連する問題