2012-07-02 6 views
2

저는 Android와 PHP를 처음 사용합니다. 내가하려고하는 일은 외부 MySql 데이터베이스에서 검색 값을 다시 Android 장치로 검색하는 것입니다. 데이터베이스는 174,000에서 200,000 개의 항목으로 구성되어 있으므로 패키지에 포함 시키면 내부 SqlLite를 사용할 수 없습니다.MySQL 데이터베이스에서 검색된 데이터를 검색하여 사용자에게 반환하십시오.

<?php 

    mysql_connect("myhost","myuser","mypass"); 

    mysql_select_db("mydb"); 

$sql=mysql_query("select * from myTable"); 

$output = array(); 
while($row = mysql_fetch_assoc($sql)) { 
$output['txt'][] = $row; 
} 

exit (json_encode($output)); 

mysql_close(); 
?> 

레이아웃에서 호출되는 테스트 클래스에는이 코드가 있습니다. 문제는 외부 데이터베이스에 연결할 수 있으며 심지어 데이터베이스에 추가를 지정하는 것입니다.하지만 특정 사용자 정의 용어를 얻는 데는 분실했습니다. 지금은 그것을 실행할 때 전체 테이블 (120,000 항목)을 다운로드하고, 문자열을 구문 분석하고, 목록보기로 표시하려고 시도하지만, 10MB에서는 충돌이 발생하고 fc이어야합니다. 누군가가 달걀을 검색 할 때 PHP와 Android를 멋지게 지정하는 방법을 알아낼 수 있다면 달걀에 대한 모든 값 (탄수화물, 칼로리, mm 등)이 반환됩니다.

PHP 스크립트는 정적이므로 get 명령을 변경하는 방법을 알 수는 없지만 이전에 응용 프로그램을 보았 기 때문에 가능합니다.

패키지 carbcounter.project;

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicNameValuePair; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.LinearLayout; 
import android.widget.TextView; 


public class SqlTest extends Activity { 
/** Called when the activity is first created. */ 

    TextView txt; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.sqltest);  
    LinearLayout rootLayout = new LinearLayout(getApplicationContext()); 
    txt = new TextView(getApplicationContext()); 
    rootLayout.addView(txt); 
    setContentView(rootLayout); 

    txt.setText("Connecting..."); 
    txt.setText(getServerData(KEY_121)); 



} 
public static final String KEY_121 = "http://android.mywebspace.com/androidscript.php"; 



private String getServerData(String returnString) { 

    InputStream is = null; 

    String result = ""; 
    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
    nameValuePairs.add(new BasicNameValuePair("Abbrev","eggs")); 

    try{ 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost(KEY_121); 
      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()); 
    } 

    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"); 
      } 
      is.close(); 
      result=sb.toString(); 
    } 
    catch(Exception e) 
    { 
      Log.e("log_tag", "Error converting result "+e.toString()); 
    } 
    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")+ 
          ", type: "+json_data.getString("type")+ 
          ", description: "+json_data.getInt("description")+ 
          ", carbs: "+json_data.getInt("carbs") 
        ); 
        returnString += "\n\t" + jArray.getJSONObject(i); 
      } 
    } 
    catch(JSONException e) 
    { 
      Log.e("log_tag", "Error parsing data "+e.toString()); 
    } 
    return returnString; 
}  

} 

미리 감사드립니다.

p.s. 올바른 로그인, 암호, db 등을 가지고 있습니다. 게시물에 대해 변경했습니다.

+0

숨바꼭질 사랑, 내가 코드를 얻을 수 있습니다하시기 바랍니다 ??? 나는 안드로이드에 새로 왔지만 검색에 대한 해결책을 얻을 수 없으므로 당신의 도움이 필요합니다. –

답변

2

쿼리에 WHERE 절을 넣어야합니다.

캐치 같은 안드로이드에서 스크립트로 전송 약칭 매개 변수 ...

<?php 
    $abbrev = mysql_real_escape_string($_POST['Abbrev']); 
    $query = sprintf("SELECT * FROM myTable WHERE Abbrev='%s'",$abbrev); //I assumed here that your table field is called Abbrev too 
    ... your code here 

?> 
+0

고맙습니다. 당신이 말한대로였습니다. – user1509521

관련 문제