Android アプリケーションを mysql データベースに接続しようとしています。データベース「tardy_system」は、wamp サーバーが提供する phpmyadmin 内で実行されています。C:/Wamp/www/Latepass に、API バックエンドとして機能する php ファイル「login.php」があります。その主な目的は、データベースに接続してクエリを実行し、解析された JSON データとして機能することです。Android 環境内の Java コードは、index.php コードに接続することが想定されています。Java コードを php API バックエンドに接続できません。Java コードは、 http://192.168.0.102:3306/Latepass/ login.phpを参照するように指定しています。ファイルのために。この LAN アドレスは、wamp サーバーとデータベースの現在の内部アドレスです。現時点では動的ですが、最終的には静的 IP に変更します。Android APKを保存してエクスポートして実行した後、「学生ログイン」ボタンをクリックすると、Javaコードが開始されますが、
接続は常に失敗します。
PHP コードは機能し、LAN 上のどのコンピューターからでもアクセスできます。テスト クエリ (FOR DEBUGGINGONLY で始まるすべて) を実行したところ、LAN 上のどこからでも 2 つのブラウザー (Chrome と Firefox) で読み取ることができました。
ネットワーク経由でphpファイルに接続できるため、WAMPサーバーは機能しています。ブラウザ内でテスト クエリを実行するため、PHP ファイルは機能しています。
問題: 何かが Java コードと php コードの間の接続を妨げていると思います。すべてのファイアウォール (ルーターのハードウェアと Windows のソフトウェア) を無効にしようとしました。JSON 接続はポート 3306 を使用します。そのポートをフィルタリングするものはないようです。
私のphpコード - Latepass/login.php
<?php
//turn off error reporting
error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);
//connect to mySQL
$connect = mysql_connect("localhost", "root", "") or die(mysql_error("connection error 2"));
//Select the database
mysql_select_db("tardy_system")or die("database selection error");
//Retrieve the login details via POST
$username = $_POST['username'];
$password = $_POST['password'];
//Query the table android login
$query = mysql_query("SELECT * FROM students WHERE username='$username' AND password='$password'");
//check if there any results returned
$num = mysql_num_rows($query);
//If a record was found matching the details entered in the query
if($num == 1){
//Create a while loop that places the returned data into an array
while($list=mysql_fetch_assoc($query)){
//Store the returned data into a variable
$output = $list;
//encode the returned data in JSON format
echo json_encode($output);
}
//close the connection
mysql_close();
}
?>
学生ログインアクティビティ
package com.android.upgrayeddapps.latepass;
import java.io.BufferedReader;
import java.io.IOException;
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.JSONObject;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class StudentLoginActivity extends Activity implements OnClickListener{
EditText etUsername;
EditText etPassword;
Button btnLogin;
//Create string variables that will have the input assigned to them
String strUsername;
String strPassword;
//Create a HTTPClient as the form container
HttpClient httpclient;
//Use HTTP POST method
HttpPost httppost;
//Create an array list for the input data to be sent
ArrayList<NameValuePair> nameValuePairs;
//Create a HTTP Response and HTTP Entity
HttpResponse response;
HttpEntity entity;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.studentlogin);
initialise();
}
private void initialise()
{
etUsername = (EditText) findViewById(R.id.txtbxStudentUsername);
etPassword = (EditText) findViewById(R.id.txtbxStudentLunchID);
btnLogin = (Button) findViewById(R.id.btnLoginStudent);
//Set onClickListener
btnLogin.setOnClickListener(this);
}
public void onClick(View v) {
//Create new default HTTPClient
httpclient = new DefaultHttpClient();
//Crate new HTTP POST with URL to php file as parameter
httppost = new HttpPost("http://192.168.0.102:3306/Latepass/login.php");
//Assign input text to strings
strUsername = etUsername.getText().toString();
strPassword = etPassword.getText().toString();
try{
//Create an Array List
nameValuePairs = new ArrayList<NameValuePair>();
//place them in an array list
nameValuePairs.add(new BasicNameValuePair("username", strUsername));
nameValuePairs.add(new BasicNameValuePair("password", strPassword));
//Add array list to http post
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
//assign executed for container to response
response = httpclient.execute(httppost);
//check status code, need to check status code 200
if(response.getStatusLine().getStatusCode()== 200){
//assign response.getEntity()l
//check if entity is not null
if(entity !=null){
//create new input stream with received data assigned
InputStream instream = entity.getContent();
//Create a JSON Object. Assign converted data as parameter
JSONObject jsonResponse = new JSONObject(convertStreamToString(instream));
//Assign JSON responses to local strings
String retUser = jsonResponse.getString("username");//mySQL table field
String retPass = jsonResponse.getString("password");//mySQL table field
//Validate login
if(strUsername.equals(retUser)&& strPassword.equals(retPass)){
//Create a new shared preference by getting the preference
SharedPreferences sp = getSharedPreferences("logindetails",0);
//Edit the shared Preferences
SharedPreferences.Editor spedit = sp.edit();
//Put the login details as strings
spedit.putString("username", strUsername);
spedit.putString("password", strPassword);
//Close the editor
spedit.commit();
//Display a Toast saying login was a success
Toast.makeText(getBaseContext(), "Success!",Toast.LENGTH_SHORT).show();
} else{
//Display a Toast saying it failed
Toast.makeText(getBaseContext(), "Invalid Login Details", Toast.LENGTH_SHORT).show();
}
}
}
} catch(Exception e){
e.printStackTrace();
//Display Toast when there is a connection error
Toast.makeText(getBaseContext(), "Connection Error Android",Toast.LENGTH_SHORT).show();
Log.e("YourTag", e.getMessage(), e);
}
}//End try/Catch
private static String convertStreamToString(InputStream is) {
/*
* To convert the InputStream to String we use the BufferedReader.readLine()
* method. We iterate until the BufferedReader return null which means
* there's no more data to read. Each line will appended to a StringBuilder
* and returned as String.
*/
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}//End ConvertStreamToString()
public void onGotoLatePassActiviy(View View)
{
Intent intent = new Intent(View.getContext(), LatePassActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
StudentLoginActivity.this.finish();
}
}
質問: wamp の設定で、Java コードが php コードに到達できない何かが欠けていますか?
現在、いくつかのApacheエラーが発生しているため、構成を試みる必要があります。
今日: ログイン プロセス中にwiresharkを実行しました。tcp 送信元と送信先 = 3306 フィルターを適用しました。この送信を取得しました