ANDROID+PHPインタラクション
6414 ワード
環境設定:
windows:
Wampダウンロードアドレス:www.wampserver.com
https://github.com/teddysun/lamp
linux:
apt-get -y install wget screen git
git clone https://github.com/teddysun/lamp.git
cd lamp
chmod 755 *.sh
screen -S lamp
./lamp.sh
2,phpバックグラウンドソース
conn.php
$dbhost="120.78.121.226:3306";
$dbuser="root";
$dbpassword="tripod";
$dbname="test_db";
//最新のmysqlはmysqliスイッチでインタフェースを検索する必要があります
$conn=mysqli_connect($dbhost,$dbuser,$dbpassword) or die("connect error");
$db_selected = mysqli_select_db($conn,"$dbname") or die("Could not select hugf_db");
//文字コードを設定し、中国語表示を便利にする
mysqli_query("set names 'UTF-8'");
?>
index.php(ログイン用のユーザー名とパスワードのクエリー)
include("conn.php");
//コミットユーザ名の取得
$username=str_replace("","",$_POST['name']);
//データベースクエリー文、クエリー指定ユーザー名データ
$sql="select * from login where name='$username'";
$query=mysqli_query($conn,$sql);
$rows = mysqli_fetch_array($query);
if(is_array($rows)){
if($_POST['pwd']==$rows['password']){
//パスワードとコミットパスワードが一致している場合は、認証に成功した情報をリバースします.
echo "login succeed";
}else{
echo "error";
}
}
mysqli_close($conn);
?>
index.php(JSONデータを返し、データベースの使用するユーザ名とパスワードをJSON形式でクエリー端末に返す)
include("conn.php");
$username=str_replace("","",$_POST['name']);
//データベーステーブルloginすべてのテーブルデータを返す
$sql="select * from login ";
$query=mysqli_query($conn,$sql);
//新規データ作成
$jarr = array();
while($rows = mysqli_fetch_array($query)){
//データベース情報を配列に入れる
array_push($jarr,$rows);
}
//JSON情報に変換して端末に戻る
echo $str=json_encode($jarr);
mysqli_close($conn);
?>
Android端末コード:
アクセス権:
LoginActivity.java
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.HttpResponse;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.util.EntityUtils;
class ThreadPhp extends Thread {
@Override
public void run() {
Log.i("huguifeng","huguifeng--------2-------------LoginHandler");
String userName = "huguifeng";
String password = "hugf123";
//サーバーへの接続先、私が傍受しているのは8080ポートです
String connectURL="http://120.78.121.226/";
//ユーザー名パスワードと接続先を記入する
boolean isLoginSucceed = gotoLogin(userName, password,connectURL);
//戻り値がtrueかどうかを判断し、もしそうならホームページにジャンプします.
Log.i("huguifeng","huguifeng-----------------isLoginSucceed="+isLoginSucceed);
if(isLoginSucceed){
//Toast.makeText(FullscreenActivity.this、「登録成功」,Toast.LENGTH_LONG).show();
}else{
//Toast.makeText(FullscreenActivity.this、「ログインエラー」,Toast.LENGTH_LONG).show();
}
}
}
private boolean gotoLogin(String userName, String password,String connectUrl) {
String result=null;//戻るStringを取得するために使用されます.
boolean isLoginSucceed = false;
//postリクエスト送信
HttpPost httpRequest = new HttpPost(connectUrl);
///POst動作転送変数はNameValue Pair[]アレイで保存する必要があります
List params = new ArrayList();
params.add(new BasicNameValuePair("name",userName));
params.add(new BasicNameValuePair("pwd",password));
try{
//HTTPリクエスト
httpRequest.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
Log.i("huguifeng","huguifeng-------------httpRequest");
//HTTP response取得
HttpResponse httpResponse=new DefaultHttpClient().execute(httpRequest);
//ステータスコードが200であれば要求に成功し、返却データを受け取る
Log.i("huguifeng","huguifeng-------------httpResponse.getStatusLine().getStatusCode()="+httpResponse.getStatusLine().getStatusCode());
if(httpResponse.getStatusLine().getStatusCode()==200){
//文字列の取り出し
result= EntityUtils.toString(httpResponse.getEntity());
Log.i("huguifeng","huguifeng-------------result="+result);
//system.out.println("result= "+result);
}
}catch(Exception e){
Log.i("huguifeng","huguifeng-------------e="+e.toString());
e.printStackTrace();
}
//返されたデータがphpに正常に登録されたかどうかを判断するのは出力です
if(result!= null && result.equals("login succeed")){
isLoginSucceed = true;
}
return isLoginSucceed;
}
以上のコードでログイン機能を検証したり、戻ってきたJSON配列情報を直接問い合わせることができます.
app moduleモジュールのbuild.gradleの下に追加する必要があります.
androidの最新バージョンはapacheをサポートしていないため
この機能は本来本機で実現しようとしたもので、シミュレータを使って、次のような問題を発見しました.
1.シミュレータのIPアドレスはネイティブアドレスと同じで、
2.私のUBUNTUシステムはWINDOWS仮想マシンをインストールして、シミュレータは仮想マシンで、新しいAPIバージョンはサポートしません.古いバージョンはまた驚くほど遅い.
同じ問題を避けることができる友达がいることを望んでいます.
windows:
Wampダウンロードアドレス:www.wampserver.com
https://github.com/teddysun/lamp
linux:
apt-get -y install wget screen git
git clone https://github.com/teddysun/lamp.git
cd lamp
chmod 755 *.sh
screen -S lamp
./lamp.sh
2,phpバックグラウンドソース
conn.php
$dbhost="120.78.121.226:3306";
$dbuser="root";
$dbpassword="tripod";
$dbname="test_db";
//最新のmysqlはmysqliスイッチでインタフェースを検索する必要があります
$conn=mysqli_connect($dbhost,$dbuser,$dbpassword) or die("connect error");
$db_selected = mysqli_select_db($conn,"$dbname") or die("Could not select hugf_db");
//文字コードを設定し、中国語表示を便利にする
mysqli_query("set names 'UTF-8'");
?>
index.php(ログイン用のユーザー名とパスワードのクエリー)
include("conn.php");
//コミットユーザ名の取得
$username=str_replace("","",$_POST['name']);
//データベースクエリー文、クエリー指定ユーザー名データ
$sql="select * from login where name='$username'";
$query=mysqli_query($conn,$sql);
$rows = mysqli_fetch_array($query);
if(is_array($rows)){
if($_POST['pwd']==$rows['password']){
//パスワードとコミットパスワードが一致している場合は、認証に成功した情報をリバースします.
echo "login succeed";
}else{
echo "error";
}
}
mysqli_close($conn);
?>
index.php(JSONデータを返し、データベースの使用するユーザ名とパスワードをJSON形式でクエリー端末に返す)
include("conn.php");
$username=str_replace("","",$_POST['name']);
//データベーステーブルloginすべてのテーブルデータを返す
$sql="select * from login ";
$query=mysqli_query($conn,$sql);
//新規データ作成
$jarr = array();
while($rows = mysqli_fetch_array($query)){
//データベース情報を配列に入れる
array_push($jarr,$rows);
}
//JSON情報に変換して端末に戻る
echo $str=json_encode($jarr);
mysqli_close($conn);
?>
Android端末コード:
アクセス権:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
LoginActivity.java
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.HttpResponse;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.util.EntityUtils;
class ThreadPhp extends Thread {
@Override
public void run() {
Log.i("huguifeng","huguifeng--------2-------------LoginHandler");
String userName = "huguifeng";
String password = "hugf123";
//サーバーへの接続先、私が傍受しているのは8080ポートです
String connectURL="http://120.78.121.226/";
//ユーザー名パスワードと接続先を記入する
boolean isLoginSucceed = gotoLogin(userName, password,connectURL);
//戻り値がtrueかどうかを判断し、もしそうならホームページにジャンプします.
Log.i("huguifeng","huguifeng-----------------isLoginSucceed="+isLoginSucceed);
if(isLoginSucceed){
//Toast.makeText(FullscreenActivity.this、「登録成功」,Toast.LENGTH_LONG).show();
}else{
//Toast.makeText(FullscreenActivity.this、「ログインエラー」,Toast.LENGTH_LONG).show();
}
}
}
private boolean gotoLogin(String userName, String password,String connectUrl) {
String result=null;//戻るStringを取得するために使用されます.
boolean isLoginSucceed = false;
//postリクエスト送信
HttpPost httpRequest = new HttpPost(connectUrl);
///POst動作転送変数はNameValue Pair[]アレイで保存する必要があります
List params = new ArrayList();
params.add(new BasicNameValuePair("name",userName));
params.add(new BasicNameValuePair("pwd",password));
try{
//HTTPリクエスト
httpRequest.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
Log.i("huguifeng","huguifeng-------------httpRequest");
//HTTP response取得
HttpResponse httpResponse=new DefaultHttpClient().execute(httpRequest);
//ステータスコードが200であれば要求に成功し、返却データを受け取る
Log.i("huguifeng","huguifeng-------------httpResponse.getStatusLine().getStatusCode()="+httpResponse.getStatusLine().getStatusCode());
if(httpResponse.getStatusLine().getStatusCode()==200){
//文字列の取り出し
result= EntityUtils.toString(httpResponse.getEntity());
Log.i("huguifeng","huguifeng-------------result="+result);
//system.out.println("result= "+result);
}
}catch(Exception e){
Log.i("huguifeng","huguifeng-------------e="+e.toString());
e.printStackTrace();
}
//返されたデータがphpに正常に登録されたかどうかを判断するのは出力です
if(result!= null && result.equals("login succeed")){
isLoginSucceed = true;
}
return isLoginSucceed;
}
以上のコードでログイン機能を検証したり、戻ってきたJSON配列情報を直接問い合わせることができます.
app moduleモジュールのbuild.gradleの下に追加する必要があります.
useLibrary 'org.apache.http.legacy'
androidの最新バージョンはapacheをサポートしていないため
この機能は本来本機で実現しようとしたもので、シミュレータを使って、次のような問題を発見しました.
1.シミュレータのIPアドレスはネイティブアドレスと同じで、
2.私のUBUNTUシステムはWINDOWS仮想マシンをインストールして、シミュレータは仮想マシンで、新しいAPIバージョンはサポートしません.古いバージョンはまた驚くほど遅い.
同じ問題を避けることができる友达がいることを望んでいます.