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端末コード:
 
アクセス権:
<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バージョンはサポートしません.古いバージョンはまた驚くほど遅い.
同じ問題を避けることができる友达がいることを望んでいます.