2011-01-16 28 views
6

He estado probando los tutoriales que se muestran en varios sitios web sobre la conexión de una base de datos MySQL a Android. En este momento, el código siguiente, toma los valores en los que codifica duro, (es decir, año = 2005 y name = tom) y los ejecuta a través del script php. Lo que me gustaría saber es cómo puedo modificar esto, de modo que toma los valores de lo que el usuario ingresa en un cuadro de texto.Android - Conexión a la base de datos MySQL

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

Es posible que desee etiquetar esto como java en lugar de php – Naatan

+3

No debe permitir que las aplicaciones de Android del lado del cliente accedan a una base de datos general mysql. Sería posible obtener las credenciales de la aplicación y acceder a la base de datos directamente permitiendo a los usuarios hacer cualquier cosa con la base de datos. En su lugar, debe crear una API pública que admita un conjunto fijo de operaciones que necesita para que su aplicación funcione. – poke

+0

posible duplicado de [Acceso a MySQL directamente desde Android] (http://stackoverflow.com/questions/4675781/accessing-mysql-directly-from-android) –

Respuesta

5

Bien, entiendo lo que quieres. Desea tener un EditText o dos en la aplicación. El usuario ingresará información en él y luego de presionar un botón, la información en EditText debe moverse a la base de datos mysql. Entonces, quiere hacer una aplicación dinámica que inserte un registro en mysql. Para eso, haga lo siguiente para modificar el código java anterior.

Inserte la siguiente línea a continuación, TextView txt;

EditText editTxt; 

A continuación rootLayout.addView (txt); inserto siguiendo dos líneas,

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

Ahora, modificar esta línea, nameValuePairs.add (nuevo BasicNameValuePair ("nombre", "tom")); para obtener valor de EditText.

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

También puede crear una por año.

Cuestiones relacionadas