2011-01-16 5 views
6

Ich habe die Tutorials auf verschiedenen Websites beim Verbinden einer MySQL-Datenbank mit Android getestet. Im Moment nimmt der unten stehende Code die Werte, die Sie fest einprogrammiert haben (d. H. Jahr = 2005 und Name = tom) und führt sie durch das PHP-Skript. Was ich gerne wissen würde, ist, wie ich das ändern kann, so dass es die Werte dessen nimmt, was der Benutzer in ein Textfeld eingibt.Android - Verbindung mit MySQL-Datenbank

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

Sie könnten dies als Java anstelle von PHP taggen – Naatan

+3

Sie sollten nicht zulassen, dass clientseitige Android-Anwendungen auf eine allgemeine MySQL-Datenbank zugreifen. Es wäre leicht möglich, die Anmeldeinformationen aus der Anwendung herauszuholen und direkt auf die Datenbank zuzugreifen, sodass Benutzer alles mit der Datenbank tun können. Stattdessen sollten Sie eine öffentliche API erstellen, die eine Reihe von Vorgängen unterstützt, damit Ihre Anwendung funktioniert. – poke

+0

mögliches Duplikat von [Zugriff auf MySQL direkt von Android] (http://stackoverflow.com/questions/4675781/accessing-mysql-directly-from-android) –

Antwort

5

Okay, ich verstehe was du willst. Sie möchten einen oder zwei EditText in der App haben. Der Benutzer wird darin Informationen eingeben und nach dem Drücken eines Knopfes sollte sich die Information in dem EditText in die Mysql-Datenbank bewegen. Sie möchten also eine dynamische App erstellen, die Datensätze in mysql einfügt. Dazu folgendes um den obigen Java-Code zu modifizieren.

Fügen Sie die folgende Zeile ein: TextView txt;

EditText editTxt; 

Unten rootLayout.addView (txt); Einsatz folgenden zwei Zeilen,

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

Nun ändern Sie diese Zeile, nameValuePairs.add (neu BasicNameValuePair ("name", "tom"));, um den Wert vom EditText zu holen.

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

Sie können auch eine für das Jahr erstellen.