Android 未连接到数据库以检查用户名和密码
Android is not connecting to database to check the username and password
我在教程视频中看到了这段代码,在该视频中,应用程序运行正常,甚至显示“登录成功”提示。
但是当我尝试复制它时,即使我输入了数据库中正确的用户名和密码,它也无法正常工作。 (我在 XAMPP 上尝试使用用户的 LAN IP 和 Wi-Fi IP,还尝试在 000webhost.com 上托管 PHP 脚本,但仍然无法使用任何一种方法)
我的Android代码:
package com.example.devarsh.googlemapsbustracker;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GoogleApiAvailability;
import java.util.HashMap;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private static final int ERROR_DIALOG_REQUEST = 9001;
private EditText User_name, Pass_word;
private Button btnlogin;
private static String URL_LOGIN =
"http://192.168.50.127/Android/login.php";
//vars
EditText enroll;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnlogin = findViewById(R.id.button2);
User_name = findViewById(R.id.username);
Pass_word = findViewById(R.id.password);
btnlogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Login();
}
});
isServicesOK();
}
private void Login(){
String URL =
"imagebustracker.000webhostapp.com/Android/parul/login.php";
RequestQueue requestQueue = Volley.newRequestQueue(this);
StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
if(response.trim().equals("success")){
Toast.makeText(getApplicationContext(), "Login Successfull", Toast.LENGTH_LONG).show();
Intent intent = new Intent(getApplicationContext(), Selection_Activity.class);
startActivity(intent);
}else{
Toast.makeText(getApplicationContext(), "Login Unsuccessfull", Toast.LENGTH_LONG).show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), "Login Unsuccessfull", Toast.LENGTH_LONG).show();
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<>();
params.put("UserName", User_name.getText().toString().trim());
params.put("PassWord", Pass_word.getText().toString().trim());
return params;
}
};
requestQueue.add(stringRequest);
}
public void isServicesOK() {
Log.d(TAG, "isServicesOK: checking google services version");
int available = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(this);
if(available == ConnectionResult.SUCCESS){
//everything is fine and user can make map request
Log.d(TAG, "isServicesOK: Google Play Services is working");
}
else if(GoogleApiAvailability.getInstance().isUserResolvableError(available)){
//there is an error but we can fix it
Log.d(TAG, "isServicesOK: An error is there but we can fix it");
Dialog dialog = GoogleApiAvailability.getInstance().getErrorDialog(this, available, ERROR_DIALOG_REQUEST);
dialog.show();
}else{
Toast.makeText(this, "We cant make maps request", Toast.LENGTH_SHORT).show();
}
}
}
在 Android 代码中我刚刚添加了如果 response.trim().equals("success")
那么它将开始一个新的 activity。但是一直提示“登录失败”。
PHP 脚本:
<?php
$conn =
mysqli_connect("localhost","id7263189_root","dev@1234"
,"id7263189_logintb");
mysqli_query($conn, "SET NAMES 'utf8'");
$username = $_POST["UserName"];
$password = $_POST["PassWord"];
$query = 'SELECT id FROM logintb WHERE username = "'.$username.'" and
password = "'.$password.'"';
$result = mysqli_query($conn,$query) or die('error: ' .mysql_error());
if(mysqli_num_rows($result) == 1){
echo "success";
}else{
echo "error";
}
?>
目前我正在使用 XAMPP 连接到 myphpadmin。但是,如果我需要,我会将其托管到 000webhost,以检查在互联网上使用真实设备。
首先,测试您的 PHP 脚本。因此,像这样硬编码用户名和密码变量
$username = "myUsername";
$password = "myPassword";
确保myUsername 和myPassword 是您数据库中实际存在的数据。从那里,在您的 Web 浏览器中调用相同的 URL 并查看响应。是成功还是错误。
另一件值得注意的事情是在拨打电话时阅读 Android 应用程序中的响应代码。响应代码将清楚地确定它是否正在与服务通信。但就您而言,我建议您打印出 Volleyerror。
此外,请向我提供您在本教程中使用的 link。有时对代码有双眼很好。
正如您所提到的,您遇到了 'Login Unsuccessful' toast,这意味着它触发了 onErrorResponse 函数。因此,将函数更改为以下内容:-
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), "Login Unsuccessfull", Toast.LENGTH_LONG).show();
Log.e(TAG, error); //or
System.println("VolleyError Start: " + error + " : End VolleyError");
}
并请分享错误。如果您有任何问题,请告诉我。
我在教程视频中看到了这段代码,在该视频中,应用程序运行正常,甚至显示“登录成功”提示。
但是当我尝试复制它时,即使我输入了数据库中正确的用户名和密码,它也无法正常工作。 (我在 XAMPP 上尝试使用用户的 LAN IP 和 Wi-Fi IP,还尝试在 000webhost.com 上托管 PHP 脚本,但仍然无法使用任何一种方法)
我的Android代码:
package com.example.devarsh.googlemapsbustracker;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GoogleApiAvailability;
import java.util.HashMap;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private static final int ERROR_DIALOG_REQUEST = 9001;
private EditText User_name, Pass_word;
private Button btnlogin;
private static String URL_LOGIN =
"http://192.168.50.127/Android/login.php";
//vars
EditText enroll;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnlogin = findViewById(R.id.button2);
User_name = findViewById(R.id.username);
Pass_word = findViewById(R.id.password);
btnlogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Login();
}
});
isServicesOK();
}
private void Login(){
String URL =
"imagebustracker.000webhostapp.com/Android/parul/login.php";
RequestQueue requestQueue = Volley.newRequestQueue(this);
StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
if(response.trim().equals("success")){
Toast.makeText(getApplicationContext(), "Login Successfull", Toast.LENGTH_LONG).show();
Intent intent = new Intent(getApplicationContext(), Selection_Activity.class);
startActivity(intent);
}else{
Toast.makeText(getApplicationContext(), "Login Unsuccessfull", Toast.LENGTH_LONG).show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), "Login Unsuccessfull", Toast.LENGTH_LONG).show();
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<>();
params.put("UserName", User_name.getText().toString().trim());
params.put("PassWord", Pass_word.getText().toString().trim());
return params;
}
};
requestQueue.add(stringRequest);
}
public void isServicesOK() {
Log.d(TAG, "isServicesOK: checking google services version");
int available = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(this);
if(available == ConnectionResult.SUCCESS){
//everything is fine and user can make map request
Log.d(TAG, "isServicesOK: Google Play Services is working");
}
else if(GoogleApiAvailability.getInstance().isUserResolvableError(available)){
//there is an error but we can fix it
Log.d(TAG, "isServicesOK: An error is there but we can fix it");
Dialog dialog = GoogleApiAvailability.getInstance().getErrorDialog(this, available, ERROR_DIALOG_REQUEST);
dialog.show();
}else{
Toast.makeText(this, "We cant make maps request", Toast.LENGTH_SHORT).show();
}
}
}
在 Android 代码中我刚刚添加了如果 response.trim().equals("success")
那么它将开始一个新的 activity。但是一直提示“登录失败”。
PHP 脚本:
<?php
$conn =
mysqli_connect("localhost","id7263189_root","dev@1234"
,"id7263189_logintb");
mysqli_query($conn, "SET NAMES 'utf8'");
$username = $_POST["UserName"];
$password = $_POST["PassWord"];
$query = 'SELECT id FROM logintb WHERE username = "'.$username.'" and
password = "'.$password.'"';
$result = mysqli_query($conn,$query) or die('error: ' .mysql_error());
if(mysqli_num_rows($result) == 1){
echo "success";
}else{
echo "error";
}
?>
目前我正在使用 XAMPP 连接到 myphpadmin。但是,如果我需要,我会将其托管到 000webhost,以检查在互联网上使用真实设备。
首先,测试您的 PHP 脚本。因此,像这样硬编码用户名和密码变量
$username = "myUsername";
$password = "myPassword";
确保myUsername 和myPassword 是您数据库中实际存在的数据。从那里,在您的 Web 浏览器中调用相同的 URL 并查看响应。是成功还是错误。
另一件值得注意的事情是在拨打电话时阅读 Android 应用程序中的响应代码。响应代码将清楚地确定它是否正在与服务通信。但就您而言,我建议您打印出 Volleyerror。
此外,请向我提供您在本教程中使用的 link。有时对代码有双眼很好。
正如您所提到的,您遇到了 'Login Unsuccessful' toast,这意味着它触发了 onErrorResponse 函数。因此,将函数更改为以下内容:-
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), "Login Unsuccessfull", Toast.LENGTH_LONG).show();
Log.e(TAG, error); //or
System.println("VolleyError Start: " + error + " : End VolleyError");
}
并请分享错误。如果您有任何问题,请告诉我。