2012-01-03 81 views
0

我想讓我的android應用程序從在線數據庫獲取數據。這裏有兩種情況:來自sql server的數據

  • 當我創建我的XAMPP分貝,我使用我的本地計算機的IP作爲參數httpost功能我看到的輸出什麼,我希望看到(數據庫在logcat)。

我的問題是:如果我從我的手機運行應用程序,它會連接到我的本地機器服務器嗎?

  • 我也有一個網站(可以說mysite.com),爲了不購買另一臺服務器,我將PHP文件和數據庫放在該服務器上。但是,然後我的Android應用程序連接(或者我認爲)到服務器,但它打印出整個HTML網站logcat。我在想,這是因爲服務器需要用戶名和密碼,我不知道我是否提供了它們?

那麼,你有什麼建議嗎?我希望我的數據庫被髮送到我的應用程序(以便稍後使用它)。

我的代碼如下所示(我在評論只有情景變化2之間)位於任c:\xampp\htdocs或mysite的服務器上

public class MainActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    setImageClickListener(); 

} 

private void setImageClickListener() { 
    ImageView map_image=(ImageView)findViewById(R.id.map_icon); 
    map_image.setOnTouchListener(new ImageView.OnTouchListener() { 
    //OnTouchListener listener = new OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      if(!(event.getAction() == MotionEvent.ACTION_DOWN)) 
       return false; //If the touch event was not putting the finger down on the screen, return false(Actions may be move, up, and so on) 
      final float x = event.getX(); 
      final float y = event.getY(); 
      //System.out.println("Coordinates of button pressed are: X is %d"+x+" and Y is %d"+ y); 
      if(x>335 && x<395 && y>225 && y< 235) 
       DoFirst(); 

      return true; 
     } 

}); 

} 
@SuppressWarnings("null") 
private void DoFirst() { 
    Log.d("SnowReportApp","Do first thing"); 
    setContentView(R.layout.layout_1); 
    String result = ""; 
    InputStream is = null; 
    StringBuilder sb=null; 
    //the year data to send 
    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();//() before 
    nameValuePairs.add(new BasicNameValuePair("year","1980")); 
    //http post 
    try{ 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost("192.168.1.67/test.php"); // only this changes to my server url : mysite.com/httpdocs/test.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(); 
      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()); 
    } 

    //parse JSON data 
    try{ 
      //JSONObject json_data_1 = new JSONObject(result); 
      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") 
        ); 
      } 

    }catch(JSONException e){ 
      Log.e("log_tag", "Error parsing data "+e.toString()); 
    } 

} 

我的php文件是這樣的:

<?php 

    mysql_connect("127.0.0.1","root",""); 

    mysql_select_db("peopledata"); 

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

    while($e=mysql_fetch_assoc($q)) 

      $output[]=$e; 

     print(json_encode($output)); 

mysql_close();?> 

回答

2

我的問題是:如果我從我的手機運行應用程序,它是否會連接到我的本地機器服務器或不是?

答案是可能不是。這真的一切都取決於:

  • 無論您是使用WiFi或運營商數據(3G等)
  • 無論您的數據庫端口是開放的(PC防火牆)
  • 如果運營商的數據,是你的PC可達從互聯網(靜態IP)

你最好使用mysite.com爲你的數據庫和任何你需要的後端。

至於你的其他問題,我不能回答他們,因爲他們很模糊。考慮再研究一下你的問題,也許會回來一系列有針對性的問題。

相關問題