2011-01-16 22 views
6

Ho provato le esercitazioni mostrate su vari siti Web sulla connessione di un database MySQL ad Android. Al momento il codice qui sotto, prende i valori su cui viene inserito il codice, (i.e year = 2005 e name = tom) e lo esegue attraverso lo script php. Quello che vorrei sapere è come posso modificare questo, in modo che prenda i valori di ciò che l'utente inserisce in una casella di testo.Android - Connessione al database 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

È possibile taggare questo come java anziché php – Naatan

+3

Non si deve consentire alle applicazioni Android lato client di accedere a un database mysql generale. Sarebbe facilmente possibile ottenere le credenziali dall'applicazione e accedere al database direttamente consentendo agli utenti di fare qualsiasi cosa con il database. Dovresti invece creare un'API pubblica che supporti un insieme fisso di operazioni necessarie per far funzionare la tua applicazione. – poke

+0

possibile duplicato di [Accesso a MySQL direttamente da Android] (http://stackoverflow.com/questions/4675781/accessing-mysql-directly-from-android) –

risposta

5

Ok, ho capito cosa vuoi. Vuoi avere un EditText o due nell'app. L'utente inserirà le informazioni in esso e dopo aver premuto un pulsante le informazioni in EditText dovrebbero spostarsi nel database mysql. Quindi, vuoi creare un'app dinamica che inserisca record in mysql. Per fare ciò che segue per modificare il codice java sopra.

Inserire la riga seguente, TextView txt;

EditText editTxt; 

seguito rootLayout.addView (txt); inserto seguendo due linee,

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

Ora, modificare questa linea, nameValuePairs.add (nuova BasicNameValuePair ("nome", "tom")); per recuperare il valore da EditText.

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

È inoltre possibile crearne uno per anno.

Problemi correlati