ホームページ >バックエンド開発 >PHPチュートリアル >Android クライアントと PHP サーバー間の単純な対話とログイン登録の例
サーバーはローカル Apache サーバーを使用し、すべての php ファイルは D:AppServwww ディレクトリに書き込まれます。 。以前リクエストコードを書いたのですが、リクエストされたURLに問題があるため成功しませんでした。 。要求された URL は、自分のサーバーのポート番号と一致している必要があります。ポート番号を変更する方法は、次を参照してください: http://jingyan.baidu.com/article/a65957f4fe8ec424e67f9bff.html
独自のポート番号を設定した後、要求される URL 形式にも注意する必要があります:
php ファイルはローカルに保存されます。アドレスは次のようになります: D:AppServwwwget_data.json
Android クライアントの場合: URL------------- "http://10.0.2.2:8080/get_data. Web ページ内の json"
: HTTP http://127.0.0.1:8080/get_data.json/
ここで必ず正しく取得してください。 。次に、Apache を起動します
ネットワークリクエストは時間のかかる操作であるため、リクエストの内容はサブクラスに記述されます。を継承します糸。
1.MainActivity.java
package com.example.log_user;import android.support.v7.app.ActionBarActivity;import android.support.v7.app.ActionBar;import android.support.v4.app.Fragment;import android.os.Bundle;import android.util.Log;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.Button;import android.widget.EditText;import android.os.Build;public class MainActivity extends ActionBarActivity { EditText user_name; EditText pass_word; Button login; Button zhuce; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); user_name=(EditText) findViewById(R.id.editText1); pass_word=(EditText) findViewById(R.id.editText2); login=(Button) findViewById(R.id.button1); zhuce=(Button) findViewById(R.id.button2); login.setOnClickListener(new OnClickListener(){ String url="http://10.0.2.2:8080/config.inc.php"; @Override public void onClick(View arg0) { String user=user_name.getText().toString(); String pass=pass_word.getText().toString(); // TODO Auto-generated method stub new LoginThread(user,pass,url).start(); Log.d("MAIN","-------------------->MAINSUCCESS"); } }); zhuce.setOnClickListener(new OnClickListener(){ String url="http://10.0.2.2:8080/test_signup.php"; @Override public void onClick(View arg0) { // TODO Auto-generated method stub String user=user_name.getText().toString(); String pass=pass_word.getText().toString(); new signup(user,pass,url).start(); Log.d("Main","------------------->signupsuccess"); } }); }}
2.LoginThread.java ログイン
このクラスについて簡単に説明します。新しい子スレッドを作成します。スレッドから継承し、実行する必要がある操作を run メソッドに置きます。 gotoLogin メソッドは、入力されたユーザー名とパスワードがサーバーに接続されているデータベース内のフィールドと一致するかどうかを判断するために使用されます。ここでは httpClient を使用してポストリクエストを処理し、渡されたデータをこの配列に配置する必要があります。
ArrayList<NameValuePair> params投稿リクエストを実行すると、
HttpResponse respose=client.execute(post);はこのオブジェクトを文字列に変換した後、httpresponse を返します。これは、実際には、リクエストされた php URL ページによってエコーされた文字列です。
String content=EntityUtils.toString(respose.getEntity());
package com.example.log_user;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.ArrayList;import java.util.List;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.NameValuePair;import org.apache.http.client.ClientProtocolException;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.apache.http.protocol.HTTP;import org.apache.http.util.EntityUtils;import android.content.res.Resources.Theme;import android.util.Log;import android.widget.Toast;public class LoginThread extends Thread { String username; String password; String Url; @Override public void run() { // TODO Auto-generated method stub super.run(); Log.d("run","-------------------->MAINSUCCESS"); boolean isLoginSuccess=gotoLogin(username,password,Url); if(isLoginSuccess){ Log.d("Log","--------------------->登录成功"); } else { Log.d("Log","--------------------->登录失败"); } } public LoginThread(String user,String pass,String url){ this.username=user; this.password=pass; this.Url=url; } public boolean gotoLogin(String user,String pass,String url){ boolean issuccess=false; String result; //发送post请求 HttpClient client=new DefaultHttpClient(); HttpPost post = new HttpPost(url); //Post运作传送变数必须用NameValuePair[]阵列储存 ArrayList<NameValuePair> params=new ArrayList3.signup.java 登録ページ: 原理はログイン(); params.add(new BasicNameValuePair("name",user)); params.add(new BasicNameValuePair("password",pass)); try { post.setEntity(new UrlEncodedFormEntity(params)); try { HttpResponse respose=client.execute(post); if(respose.getStatusLine().getStatusCode()==HttpStatus.SC_OK){ String content=EntityUtils.toString(respose.getEntity()); Log.d("post","--------------------->success"); Log.d("post",content+""); if(content.equals("logsuccess")){ issuccess=true; } } else { Log.d("post","--------------------->failes"); } } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return issuccess; } }
package com.example.log_user;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.ArrayList;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.NameValuePair;import org.apache.http.client.ClientProtocolException;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.apache.http.util.EntityUtils;import android.util.Log;public class signup extends Thread { private String username; private String password; private String url; @Override public void run() { // TODO Auto-generated method stub super.run(); boolean issuccess=doPOSThttp(username,password,url); if(issuccess){ Log.d("sign","-------------->signsuccess"); } else { Log.d("sign","-------------->signfailue"); } } public signup(String user,String password,String url){ this.username=user; this.password=password; this.url=url; } public boolean doPOSThttp(String username,String password,String url){ boolean issuccess=false; HttpClient client=new DefaultHttpClient(); HttpPost post =new HttpPost(url); ArrayList<NameValuePair> param=new ArrayList<NameValuePair>(); param.add(new BasicNameValuePair("name",username)); param.add(new BasicNameValuePair("password",password)); try { post.setEntity(new UrlEncodedFormEntity(param)); try { HttpResponse response=client.execute(post); if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK){ String cont=EntityUtils.toString(response.getEntity()); Log.d("post","------------>"+cont); if(cont.equals("signsuccess")) { issuccess=false; } } } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return issuccess; } }
2つ。サーバーの準備
1. config.inc.php クライアントのログインリクエストに相当します。渡されたデータは $_POST メソッドによって取得され、データベース内のデータが照合され、照合が成功すると識別文字列がエコーされ、クライアントが応答を使用して判定用の文字列を取得できるようになります。
<?$db_host=localhost;$db_user="root";$db_pass="123456789";$db_name="stu";$table_name="student";/* mysql_query('set names utf8'); */if($con=mysql_connect($db_host,$db_user,$db_pass)){ }else{ echo "连接失败";}if(mysql_select_db(web_01)){}else{ echo "选择数据库失败";}$username=$_POST['name'];$sql="select * from my_user where name='$username'";$query=mysql_query($sql);if($row=mysql_fetch_array($query)){ if($_POST['password']==$row['password']) echo "logsuccess";}mysql_close($con);?>
2.test_signup.php これはクライアントの登録リクエストに対応します。 ❤️