2011-01-16 22 views
6

Ben bir MySQL veritabanı android bağlamak için çeşitli web sitelerinde gösterilen öğreticiler çalışıyordum. Şu anda, aşağıdaki kod, sabit kodunuzdaki değerleri alır (i.e yıl = 2005 ve name = tom) ve php komut dosyasını çalıştırır. Bilmek istediğim, bunun nasıl değiştirilebileceğidir, böylece kullanıcının yerine bir metin kutusuna girdiği değerleri alır.Android - MySQL veritabanına bağlanıyor

package com.test; 

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 test extends Activity { 
/** Called when the activity is first created. */ 

    TextView txt; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    // Create a crude view - this should really be set via the layout resources 
    // but since its an example saves declaring them in the XML. 
    LinearLayout rootLayout = new LinearLayout(getApplicationContext()); 
    txt = new TextView(getApplicationContext()); 
    rootLayout.addView(txt); 
    setContentView(rootLayout); 

    // Set the text and call the connect function. 
    txt.setText("Connecting..."); 
    //call the method to run the data retrieval 
    txt.setText(getServerData(KEY_121)); 



} 
public static final String KEY_121 = "http://***.****.com/mysqlcon.php"; //i use my real ip here 



private String getServerData(String returnString) { 

    InputStream is = null; 

    String result = ""; 
    //the year data to send 
    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
    nameValuePairs.add(new BasicNameValuePair("year","2005")); 
    nameValuePairs.add(new BasicNameValuePair("name","tom")); 

    //http post 
    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()); 
    } 

    //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"); 
      } 
      is.close(); 
      result=sb.toString(); 
    }catch(Exception e){ 
      Log.e("log_tag", "Error converting result "+e.toString()); 
    } 
    //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") 
        ); 
        //Get an output to the screen 
        returnString += "\n\t" + jArray.getJSONObject(i); 
      } 
    }catch(JSONException e){ 
      Log.e("log_tag", "Error parsing data "+e.toString()); 
    } 
    return returnString; 
} 

} 
+0

Bunu php yerine java olarak etiketlemek isteyebilirsiniz – Naatan

+3

İstemci tarafındaki android uygulamaların genel bir mysql veritabanına erişmesine izin vermemelisiniz. Kimlik bilgilerini uygulamanın dışına çıkarmak ve kullanıcıların veritabanında herhangi bir şey yapmasına izin vermek için doğrudan veritabanına erişmesi kolayca mümkün olacaktır. Bunun yerine, uygulamanızı çalıştırmanız için gereken sabit bir işlem kümesini destekleyen bir genel API oluşturmalısınız. – poke

+0

[MySQL Doğrudan Android'den Erişme] 'nin olası kopyası (http://stackoverflow.com/questions/4675781/accessing-mysql-directly-from-android) –

cevap

5

Tamam, ne istersin anlıyorum. Uygulamada bir EditText veya iki tane olmasını istersiniz. Kullanıcı bilgi girecek ve bir düğmeye bastıktan sonra EditText içinde mysql veritabanına taşınmalıdır. Yani, mysql içine kayıt ekler dinamik bir uygulama yapmak istiyorum. Bunun için yukarıdaki java kodunu değiştirmek için aşağıdakileri yapın.

Aşağıdaki satırı aşağıya ekleyin, TextView txt; rootLayout.addView (txt) altında

EditText editTxt; 

; iki hat aşağıdaki uç, şimdi

editTxt = new EditText(this); 
rootLayout.addView(editTxt); 

, bu hat ve değişiklikler, nameValuePairs.add (yeni BasicNameValuePair ("adı," "tom")); EditText öğesinden değer almak için.

nameValuePairs.add(new BasicNameValuePair("name",editTxt.getText().toString())); 

Ayrıca yıl için bir tane oluşturabilirsiniz.

İlgili konular