我試圖創建一個簡單的登錄到我的Android應用程序,輸入來自用戶從以下這些教程數據庫進行比較數據:不能使用WAMP本地服務器的Android應用程序連接到MySQL數據庫
- http://androidcss.com/android/test-android-app-php-localhost-wamp/
- http://androidcss.com/android/android-php-mysql-login-tutorial/
。 我有兩個PHP,文件名爲的config.inc.php和login.inc.php放在以下目錄:C:\ wamp64 \ WWW \ DUFT,他們看起來是這樣的:
配置.inc.php
<?php $servername = "localhost:80";
$username = "root";
$password = "root";
$dbname = "duft";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
die("OOPs something went wrong");
}
?>
login.inc.php
<?php
include 'config.inc.php';
// Check whether username or password is set from android
if(isset($_POST['username']) && isset($_POST['password']))
{
// Innitialize Variable
$result='';
$username = $_POST['username'];
$password = $_POST['password'];
// Query database for row exist or not
$sql = 'SELECT * FROM tbl_login WHERE email = :username AND adgangskode = :password';
$stmt = $conn->prepare($sql);
$stmt->bindParam(':username', $username, PDO::PARAM_STR);
$stmt->bindParam(':password', $password, PDO::PARAM_STR);
$stmt->execute();
if($stmt->rowCount())
{
$result="true";
}
elseif(!$stmt->rowCount())
{
$result="false";
}
// send result back to android
echo $result;
}?>
然後,我有我使用的AsyncTask馬在我的LoginActivity類在後臺連接到數據庫。在onPostExecute()方法中,如果用戶輸入與數據庫中的內容匹配,我試圖啓動一個新的活動。但我一直從PHP-文件收到此錯誤:
警告(!): PDO :: __結構():\ wamp64 \ WWW \ DUFT \登錄:MySQL服務器在 C已消失。 inc.php on line 調用堆棧#TimeMemoryFunctionLocation10.0042244400 {main}()... \ login.inc.php : 020.0043245592http://www.php.net/PDO.construct'target ='_ new ')__ construct( )... \ login.inc.php : 10(!)警告: PDO :: __ construct():讀取問候數據包時出錯。調用堆棧#TimeMemoryFunctionLocation10.0042244400 {main}()... \ login.inc.php : 020.0043245592http://www.microsoft.com/downloads/details.asp?url=/library/default.mspx //www.php.net/PDO.construct」目標= '_新'> __構造( )... \ login.inc.php : 10OOPs 出事了
這是我的logcat說:
我LoginActivity Java類看起來是這樣的:
public class LoginActivity extends AppCompatActivity{
//NYT
// CONNECTION_TIMEOUT and READ_TIMEOUT are in milliseconds
public static final int CONNECTION_TIMEOUT=2000000000;
public static final int READ_TIMEOUT=2000000000;
private EditText etEmail;
private EditText etPassword;
//NYT
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
//NYT
// Get Reference to variables
etEmail = (EditText) findViewById(R.id.eMail);
etPassword = (EditText) findViewById(R.id.password);
//NYT
TextView klikHer = (TextView) findViewById(R.id.klikHer);
klikHer.setPaintFlags(klikHer.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
Button login = (Button) findViewById(R.id.signIn);
login.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//Intent intent = new Intent(LoginActivity.this, MenuScreen.class);
//startActivity(intent);
//NYT
// Get text from email and passord field
final String email = etEmail.getText().toString();
final String password = etPassword.getText().toString();
// Initialize AsyncLogin() class with email and password
new AsyncLogin().execute(email, password);
//NYT
}
});
}
private class AsyncLogin extends AsyncTask<String, String, String> {
ProgressDialog pdLoading = new ProgressDialog(LoginActivity.this);
HttpURLConnection conn;
URL url = null;
@Override
protected void onPreExecute() {
super.onPreExecute();
//this method will be running on UI thread
pdLoading.setMessage("\tLoading...");
pdLoading.setCancelable(false);
pdLoading.show();
}
@Override
protected String doInBackground(String... params) {
try {
// Enter URL address where your php file resides
url = new URL("http://192.168.87.100/DUFT/login.inc.php");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "exception";
}
try {
// Setup HttpURLConnection class to send and receive data from php and mysql
conn = (HttpURLConnection) url.openConnection();
//conn.setReadTimeout(READ_TIMEOUT);
//conn.setConnectTimeout(CONNECTION_TIMEOUT);
conn.setRequestMethod("POST");
// setDoInput and setDoOutput method depict handling of both send and receive
conn.setDoInput(true);
conn.setDoOutput(true);
// Append parameters to URL
Uri.Builder builder = new Uri.Builder()
.appendQueryParameter("username", params[0])
.appendQueryParameter("password", params[1]);
String query = builder.build().getEncodedQuery();
// Open connection for sending data
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(query);
writer.flush();
writer.close();
os.close();
conn.connect();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
return "exception";
}
try {
int response_code = conn.getResponseCode();
// Check if successful connection made
if (response_code == HttpURLConnection.HTTP_OK) {
// Read data sent from server
InputStream input = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
StringBuilder result = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
result.append(line);
}
// Pass data to onPostExecute method
return (result.toString());
} else {
return ("unsuccessful");
}
} catch (IOException e) {
e.printStackTrace();
return "exception";
} finally {
conn.disconnect();
}
}
@Override
protected void onPostExecute(String result) {
//this method will be running on UI thread
pdLoading.dismiss();
if (result.equalsIgnoreCase("true")) {
/* Here launching another activity when login successful. If you persist login state
use sharedPreferences of Android. and logout button to clear sharedPreferences.
*/
Intent intent = new Intent(LoginActivity.this, MenuScreen.class);
startActivity(intent);
LoginActivity.this.finish();
} else if (result.equalsIgnoreCase("false")) {
// If username and password does not match display a error message
//Toast.makeText(LoginActivity.this, "Invalid email or password", Toast.LENGTH_LONG).Show();
} else if (result.equalsIgnoreCase("exception") || result.equalsIgnoreCase("unsuccessful")) {
//Toast.makeText(LoginActivity.this, "OOPs! Something went wrong. Connection Problem.", Toast.LENGTH_LONG).Show();
}
}
}}
我已按照教程中的所有步驟,我能夠通過輸入IPv4地址到我的手機瀏覽器與我的手機來訪問本地服務器。這意味着我也能夠訪問本地服務器上的數據庫,對吧?
確實允許連接在您的httpd配置文件 –
嘗試刪除主機端口:80 config.php .. – Omi
@OussemaAroua你能告訴我更具體的如何允許連接嗎? – Sumsar9000