2011-04-03 172 views
7

我一直在試用各種網站上顯示的使用php連接到MySQL數據庫的教程。我不知道下面的代碼有什麼問題。任何人都可以告訴我我需要做什麼。將android應用程序連接到mysql數據庫

這是我的PHP代碼

<?php 
mysql_connect("localhost","root","sugi"); 
mysql_select_db("android"); 
$q=mysql_query("SELECT * FROM people 
WHERE 
birthyear>'".$_REQUEST['year']."'"); 
while($e=mysql_fetch_assoc($q)) 
      $output[]=$e; 
     print(json_encode($output)); 
     mysql_close(); ?> 

這是我的SQL查詢

CREATE TABLE `people` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , 
`name` VARCHAR(100) NOT NULL , 
`sex` BOOL NOT NULL DEFAULT '1', 
`birthyear` INT NOT NULL 
) 

這是Android

public class main extends Activity { 
    InputStream is; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     String result = ""; 
     //the year data to send 
     ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
     nameValuePairs.add(new BasicNameValuePair("year","1990")); 

     //http post 
     try{ 
       HttpClient httpclient = new DefaultHttpClient(); 
       HttpPost httppost = new HttpPost("http://localhost/index.php"); 
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
       HttpResponse response = httpclient.execute(httppost); 
       HttpEntity entity = response.getEntity(); 
       is = entity.getContent(); 
       Log.e("log_tag", "connection success "); 
       Toast.makeText(getApplicationContext(), "pass", Toast.LENGTH_SHORT).show(); 
     }catch(Exception e){ 
       Log.e("log_tag", "Error in http connection "+e.toString()); 
       Toast.makeText(getApplicationContext(), "fail", Toast.LENGTH_SHORT).show(); 

     } 
     //convert response to string 
     try{ 
       BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 
       StringBuilder sb = new StringBuilder(); 
       String line = null; 
       while ((line = reader.readLine()) != null) { 
         sb.append(line + "\n"); 
         Toast.makeText(getApplicationContext(), "pass", Toast.LENGTH_SHORT).show(); 
       } 
       is.close(); 

       result=sb.toString(); 
     }catch(Exception e){ 
       Log.e("log_tag", "Error converting result "+e.toString()); 
      Toast.makeText(getApplicationContext(), "fail", Toast.LENGTH_SHORT).show(); 

     } 

     //parse json data 
     try{ 
       JSONArray jArray = new JSONArray(result); 
       for(int i=0;i<jArray.length();i++){ 
         JSONObject json_data = jArray.getJSONObject(i); 
         Log.i("log_tag","id: "+json_data.getInt("id")+ 
           ", name: "+json_data.getString("name")+ 
           ", sex: "+json_data.getInt("sex")+ 
           ", birthyear: "+json_data.getInt("birthyear") 
         ); 
         Toast.makeText(getApplicationContext(), "pass", Toast.LENGTH_SHORT).show(); 
       } 

     }catch(JSONException e){ 
       Log.e("log_tag", "Error parsing data "+e.toString()); 
       Toast.makeText(getApplicationContext(), "fail", Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 

程序做工精細我的Java代碼。但我不能連接到http://localhost/index.php。程序顯示失敗3次。可以幫我看看我哪裏出錯了?

感謝大家的幫助。現在我可以連接到MySQL。但我不能得到json數據的價值。編制敬酒信息2通和1失敗。誰能幫我?下面的圖片是當我在我的IE中鍵入http://localhost/index.php。而第6行是這一切

$q=mysql_query("SELECT * FROM people WHERE birthyear>'".$_REQUEST['year']."'"); 

我不知道我哪裏出錯了。

enter image description here

+0

我對PHP一無所知,但是我發現你的請求有正確的答案:JSON對象數組。可能PHP腳本工作正常。 – 2011-04-05 07:22:40

回答

-3

嘗試http://127.0.0.1/index.php以代替localhost

+0

127.0.0.1是localhost的同義詞。無論哪種方式,它指向自己(電話),它永遠不會到達,並指向其他計算機,如果它指向自己。如果mysql服務器和web服務器直接託管在手機上,這將工作。 – 2011-04-03 16:21:00

+0

在我看來,他和模擬器一起工作,我在使用本地主機時遇到了問題,並且當我更改爲127.0.0.1時它工作正常。 – James 2011-04-03 16:26:12

+0

不是我的觀點,webserver/mysql不在本地主機上。即使在模擬器localhost仍然是電話而不是主機。 – 2011-04-03 21:35:56

5

如果你的PHP腳本部署在本地主機,要部署在模擬器Android應用,那麼你應該使用此構造函數: HttpPost httppost =新HttpPost(」 http://10.0.2.2/index.php「);

請參見:http://developer.android.com/guide/developing/devices/emulator.html#emulatornetworking

+0

omg非常感謝..它可以工作:D:D:D:D – sugianto 2011-04-04 03:59:12

+1

嗨,非常感謝。最後它可以連接到我的sql:D。但我不能得到我的json_data的價值。仿真器顯示2通過,1失敗。我懷疑我的php有什麼問題。我對嗎?你能幫我解決這個問題嗎? – sugianto 2011-04-04 05:26:51

+0

嘗試用不同的客戶端調試腳本,看看Http答案是否正確。 – 2011-04-04 09:22:33

0

的問題是,你要在本地主機上訪問的東西。代碼運行時,本地主機將成爲您的手機。如果你使用模擬器,你可以使用Andrey的解決方案。

否則,如果您在本地網絡上使用WiFi,您必須知道您的計算機的IP地址。或者如果你使用3G,Edge,GSM網絡。你應該輸入你的電腦的IP地址。

你可以去那裏:http://whatismyip.com

如果您使用路由器或ISP阻止HTTP端口(80)。你必須做一個端口重定向到不同的東西。我的猜測是你應該使用手機和網頁瀏覽器測試網址。

0
HttpPost httppost = new HttpPost("http://localhost/index.php"); 

將其更改爲您的本地主機的IP地址。

我對android應用程序很新穎,但是我知道如果您將您的帖子更改爲http://192.168.x.x(您的本地本地IP地址在您的路由器中),您應該可以查看它。我運行一個WAMP環境,然後在從我的網絡中的其他計算機訪問我的開發計算機本地主機時遇到問題。我所做的只是確保我的WAMP服務器在線。如果你點擊WAMP圖標,你會看到「放入線上」或「放下線」。然後,我可以通過http://192.168.x.x/android/index.php在我的本地網絡中的其他筆記本電腦上查看我的網站。

相關問題