In diesem Kapitel werden wir erklären, wie Sie PHP und MySQL mit Ihrem Android-Anwendung zu integrieren. Dies ist sehr nützlich, wenn Sie einen Webserver, und Sie, um die Daten auf Ihrem Android-Anwendung zugreifen möchten.
MySQL als Datenbank auf dem Webserver verwendet und PHP wird verwendet, um Daten aus der Datenbank zu holen. Unsere Anwendung wird mit der PHP-Seite mit den notwendigen Parametern zu kommunizieren und PHP wird sich mit MySQL-Datenbank und das Ergebnis holen, und die Ergebnisse zu uns.
PHP - MYSQL
Erstellen von Datenbank
MySQL-Datenbank kann leicht mit diesem einfachen Skript erstellt werden. DieCREATE DATABASE-Anweisung erstellt die Datenbank.
<?php $con=mysqli_connect("example.com","username","password"); $sql="CREATE DATABASE my_db"; if (mysqli_query($con,$sql)) { echo "Database my_db created successfully"; } ?>
Erstellen von Tabellen
Sobald Datenbank erstellt wird, zu seiner Zeit ein paar Tabellen in der Datenbank zu erstellen. Die CREATE TABLE-Anweisung erstellt die Datenbank.
<?php $con=mysqli_connect("example.com","username","password","my_db"); $sql="CREATE TABLE table1(Username CHAR(30),Password CHAR(30),Role CHAR(30))"; if (mysqli_query($con,$sql)) { echo "Table have been created successfully"; } ?>
Einsetzen Werte in Tabellen
Wenn die Datenbank und die Tabellen erstellt werden. Nun ist es Zeit, einige Daten in die Tabellen einfügen. Die in den Einsatz-Anweisung erstellt die Datenbank.
<?php $con=mysqli_connect("example.com","username","password","my_db"); $sql="INSERT INTO table1 (FirstName, LastName, Age) VALUES ('admin', 'admin','adminstrator')"; if (mysqli_query($con,$sql)) { echo "Values have been inserted successfully"; } ?>
PHP - GET und POST Methoden
PHP wird auch verwendet, um den Datensatz aus der MySQL-Datenbank zu holen, sobald sie erstellt wird. Um Rekord holen müssen einige Informationen zum PHP-Seite in Bezug auf welche Rekord geholt werden weitergegeben.
Die erste Methode, um Informationen weiterzugeben, ist durch GET-Methode, bei der $ _GET-Befehl verwendet wird. Die Variablen werden in der URL übergeben und der Datensatz abgerufen wird. Die Syntax ist unten angegeben -
<?php $con=mysqli_connect("example.com","username","password","database name"); if (mysqli_connect_errno($con)) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $username = $_GET['username']; $password = $_GET['password']; $result = mysqli_query($con,"SELECT Role FROM table1 where Username='$username' and Password='$password'"); $row = mysqli_fetch_array($result); $data = $row[0]; if($data){ echo $data; } mysqli_close($con); ?>
Die zweite Methode ist die POST-Methode verwenden. Die einzige Änderung in der obigen Skript ist auf $ _GET ersetzen $ _POST. In Post-Methode werden die Variablen nicht über URL übergeben.
Android - Connecting MYSQL
Verbindung über Get-Methode
Es gibt zwei Möglichkeiten, um den MySQL über PHP-Seite zu verbinden. Die erste heißt Get-Methode. Wir verwenden HttpGet und Httpclient-Klasse, um zu verbinden. Ihre Syntax ist nachstehend angegeben -
URL url = new URL(link); HttpClient client = new DefaultHttpClient(); HttpGet request = new HttpGet(); request.setURI(new URI(link));
Danach müssen Sie rufen ausführen Methode der Httpclient-Klasse und die Lieferung erfolgt in einem Httpresponse-Objekt. Danach müssen Sie Ströme zu öffnen, um die Daten zu empfangen.
HttpResponse response = client.execute(request); BufferedReader in = new BufferedReader (new InputStreamReader(response.getEntity().getContent()));
Anschluss über POST-Methode
In der Post-Methode, die URLEncoder, URLConnection wird Klasse verwendet werden. Die URLEncoder werden die Informationen der Übergabe von Variablen zu kodieren. Es Syntax ist unten angegeben -
URL url = new URL(link); String data = URLEncoder.encode("username", "UTF-8") + "=" + URLEncoder.encode(username, "UTF-8"); data += "&" + URLEncoder.encode("password", "UTF-8") + "=" + URLEncoder.encode(password, "UTF-8"); URLConnection conn = url.openConnection();
Das letzte, was Sie tun müssen, ist, diese Daten, um den Link zu schreiben.Nach dem Schreiben, müssen Sie Stream öffnen, um die reagierten Daten zu empfangen.
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); wr.write( data ); BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
Beispiel
Das folgende Beispiel ist ein komplettes Beispiel für den Anschluss Ihres Android-Anwendung mit MySQL-Datenbank via PHP-Seite. Es schafft eine grundlegende Anwendung, die Sie hier mit GET und POST-Methode ermöglicht.
PHP - MYSQL Teil
In diesem Beispiel eine Datenbank mit dem Name der temporären wurde auf 000webhost.com erstellt. In dieser Datenbank hat eine Tabelle mit dem Namen des table1 erstellt. Diese Tabelle hat drei Felder. (Benutzername, Kennwort, Rolle). Die Tabelle hat nur einen Datensatz, nämlich ("admin", "admin", "Administrator").
Die PHP-Seite gegeben wurde unten, welche Parameter mit der Post-Methode erfolgt.
<?php $con=mysqli_connect("mysql10.000webhost.com","username","password","db_name"); if (mysqli_connect_errno($con)) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $username = $_POST['username']; $password = $_POST['password']; $result = mysqli_query($con,"SELECT Role FROM table1 where Username='$username' and Password='$password'"); $row = mysqli_fetch_array($result); $data = $row[0]; if($data){ echo $data; } mysqli_close($con); ?>
Android Part
Um bei diesem Beispiel zu experimentieren, müssen Sie diese auf einem Gerät, auf dem Wi-Fi Internetverbindung ausgeführt wird.
Schritte | Bezeichnung |
---|---|
1 | Sie werden Android-Studio IDE verwenden, um ein Android-Anwendung als PHPMYSQL unter einem Paket com.example.phpmysql erstellen und sie zu nennen. Bei der Erstellung dieses Projekt, stellen Sie sicher SDK Ziel und Kompilieren Sie mit der neuesten Version des Android SDK zu höheren Ebenen der APIs verwenden. |
2 | Ändern src / MainActivity.java Datei an Aktivität Code hinzufügen. |
3 | Erstellen src / SiginActivity.java Datei an PHPMYSQL Code hinzufügen. |
4 | Ändern Sie das Layout XML-Datei res / layout / activity_main.xml jede GUI-Komponente hinzufügen, wenn erforderlich. |
5 | Ändern res file / Werte / string.xml und fügen erforderlichen String-Komponenten. |
6 | Ändern AndroidManifest.xml um erforderlichen Berechtigungen hinzuzufügen. |
7 | Führen Sie die Anwendung, und wählen Sie einen laufenden Android-Gerät und installieren Sie die Anwendung und überprüfen Sie die Ergebnisse. |
Hier ist der Inhalt des src / com.example.phpmysql / MainActivity.java.
package com.example.phpmysql; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends Activity { private EditText usernameField,passwordField; private TextView status,role,method; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); usernameField = (EditText)findViewById(R.id.editText1); passwordField = (EditText)findViewById(R.id.editText2); status = (TextView)findViewById(R.id.textView6); role = (TextView)findViewById(R.id.textView7); method = (TextView)findViewById(R.id.textView9); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public void login(View view){ String username = usernameField.getText().toString(); String password = passwordField.getText().toString(); method.setText("Get Method"); new SigninActivity(this,status,role,0).execute(username,password); } public void loginPost(View view){ String username = usernameField.getText().toString(); String password = passwordField.getText().toString(); method.setText("Post Method"); new SigninActivity(this,status,role,1).execute(username,password); } }
Hier ist der Inhalt des src / com.example.phpmysql / SigninActivity.java.
package com.example.phpmysql; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.URI; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import android.content.Context; import android.os.AsyncTask; import android.widget.TextView; public class SigninActivity extends AsyncTask<String,Void,String>{ private TextView statusField,roleField; private Context context; private int byGetOrPost = 0; //flag 0 means get and 1 means post.(By default it is get.) public SigninActivity(Context context,TextView statusField,TextView roleField,int flag) { this.context = context; this.statusField = statusField; this.roleField = roleField; byGetOrPost = flag; } protected void onPreExecute(){ } @Override protected String doInBackground(String... arg0) { if(byGetOrPost == 0){ //means by Get Method try{ String username = (String)arg0[0]; String password = (String)arg0[1]; String link = "http://myphpmysqlweb.hostei.com/login.php?username="+username+"& password="+password; URL url = new URL(link); HttpClient client = new DefaultHttpClient(); HttpGet request = new HttpGet(); request.setURI(new URI(link)); HttpResponse response = client.execute(request); BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); StringBuffer sb = new StringBuffer(""); String line=""; while ((line = in.readLine()) != null) { sb.append(line); break; } in.close(); return sb.toString(); } catch(Exception e){ return new String("Exception: " + e.getMessage()); } } else{ try{ String username = (String)arg0[0]; String password = (String)arg0[1]; String link="http://myphpmysqlweb.hostei.com/loginpost.php"; String data = URLEncoder.encode("username", "UTF-8") + "=" + URLEncoder.encode(username, "UTF-8"); data += "&" + URLEncoder.encode("password", "UTF-8") + "=" + URLEncoder.encode(password, "UTF-8"); URL url = new URL(link); URLConnection conn = url.openConnection(); conn.setDoOutput(true); OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); wr.write( data ); wr.flush(); BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuilder sb = new StringBuilder(); String line = null; // Read Server Response while((line = reader.readLine()) != null) { sb.append(line); break; } return sb.toString(); } catch(Exception e){ return new String("Exception: " + e.getMessage()); } } } @Override protected void onPostExecute(String result){ this.statusField.setText("Login Successful"); this.roleField.setText(result); } }
Hier beträgt der Gehalt an activity_main.xml.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <EditText android:id="@+id/editText2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignRight="@+id/editText1" android:layout_below="@+id/editText1" android:layout_marginTop="25dp" android:ems="10" android:inputType="textPassword" > </EditText> <EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_marginTop="44dp" android:ems="10" > <requestFocus android:layout_width="wrap_content" /> </EditText> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/editText1" android:layout_alignParentLeft="true" android:text="@string/Username" /> <TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:text="@string/App" android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:id="@+id/textView7" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/textView5" android:layout_alignLeft="@+id/textView6" android:text="@string/Role" android:textAppearance="?android:attr/textAppearanceMedium" android:textSize="10sp" /> <TextView android:id="@+id/textView5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textView6" android:layout_marginTop="27dp" android:layout_toLeftOf="@+id/editText1" android:text="@string/LoginRole" /> <TextView android:id="@+id/textView8" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/textView6" android:layout_alignLeft="@+id/textView5" android:layout_marginBottom="27dp" android:text="@string/method" /> <TextView android:id="@+id/textView4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView8" android:layout_below="@+id/button1" android:layout_marginTop="86dp" android:text="@string/LoginStatus" /> <TextView android:id="@+id/textView6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@+id/textView4" android:layout_centerHorizontal="true" android:text="@string/Status" android:textAppearance="?android:attr/textAppearanceMedium" android:textSize="10sp" /> <TextView android:id="@+id/textView9" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/textView8" android:layout_alignLeft="@+id/textView6" android:text="@string/Choose" android:textAppearance="?android:attr/textAppearanceMedium" android:textSize="10sp" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_toRightOf="@+id/textView6" android:onClick="loginPost" android:text="@string/LoginPost" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/button2" android:layout_alignBottom="@+id/button2" android:layout_alignLeft="@+id/textView2" android:onClick="login" android:text="@string/LoginGet" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/editText2" android:layout_alignBottom="@+id/editText2" android:layout_alignParentLeft="true" android:text="@string/Password" /> </RelativeLayout>
Hier beträgt der Gehalt an strings.xml.
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">PHPMYSQL</string> <string name="action_settings">Settings</string> <string name="hello_world">Hello world!</string> <string name="Username">Username</string> <string name="Password">Password</string> <string name="LoginGet">Login - Get</string> <string name="LoginPost">Login - Post</string> <string name="App">Login Application</string> <string name="LoginStatus">Login Status</string> <string name="LoginRole">Login Role</string> <string name="Status">Not login</string> <string name="Role">Not assigned</string> <string name="method">Login Method</string> <string name="Choose">Choose Method</string> </resources>
Hier beträgt der Gehalt an AndroidManifest.xml.
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.phpmysql" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.phpmysql.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Lassen Sie uns versuchen, um Ihre PHPMYSQL Anwendung auszuführen. Ich nehme an, Sie Ihre aktuelle Android-Gerät mit dem Computer verbunden haben. Um die App vom Android-Studio, öffnen Sie eine der Aktivität Dateien Ihres Projekt auszuführen, und klicken Sie auf Ausführen-Symbol in der Werkzeugleiste. Vor dem Start der Anwendung wird Android Studio Display folgende Fenster, um eine Option, wo Sie Ihre Android-Anwendung ausgeführt werden soll.
Wählen Sie Ihr Mobilgerät als Option und prüfen Sie dann Ihr mobiles Gerät die folgenden Bildschirm anzuzeigen wird -
Jetzt geben Sie einfach Ihren Benutzernamen und Ihr Passwort ein. In meinem Fall bin ich der Eingabe admin als Benutzernamen und Passwort. Es ist in der Figur dargestellt -
Jetzt drücken Sie die Get-Taste und warten Sie einige Sekunden und Antwort wird heruntergeladen werden und wird Ihnen angezeigt. In diesem Fall ist die Antwort, die Rolle, die abgerufen bei admin als Benutzernamen und password.It ist in der nachfolgenden Abbildung gezeigt -
Nun drücken Sie erneut die POST-Button und gleiche Ergebnis scheint. Es ist in der folgenden Abbildung dargestellt:
0 التعليقات:
Kommentar veröffentlichen