Php 用字符串请求截取传递数据在Android Kotlin中不起作用
所以我尝试将我的android应用程序与我存储在Phpmyadmin中的数据库连接起来。我使用截击,因为很多人都推荐这种方式。我遵循了一些教程,最终得到了以下代码:Php 用字符串请求截取传递数据在Android Kotlin中不起作用,php,android,kotlin,android-volley,Php,Android,Kotlin,Android Volley,所以我尝试将我的android应用程序与我存储在Phpmyadmin中的数据库连接起来。我使用截击,因为很多人都推荐这种方式。我遵循了一些教程,最终得到了以下代码: lateinit var etLoginEmail : EditText lateinit var etLoginPass : EditText lateinit var btnLog_in : Button override fun onCreate(savedInstanceState: Bundle?) { supe
lateinit var etLoginEmail : EditText
lateinit var etLoginPass : EditText
lateinit var btnLog_in : Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
if(android.os.Build.VERSION.SDK_INT > 9){
StrictMode.setThreadPolicy(StrictMode.ThreadPolicy.Builder().permitAll().build())
}
etLoginEmail = findViewById(R.id.etLoginEmail) as EditText
etLoginPass = findViewById(R.id.etLoginPass) as EditText
btnLog_in = findViewById(R.id.btnLog_in) as Button
btnLog_in.setOnClickListener {
if (etLoginEmail?.text.isNullOrEmpty()) {
etLoginEmail?.error = "Email must be filled"
} else if (etLoginPass?.text.isNullOrEmpty()) {
etLoginPass?.error = "Password must be filled"
} else{
doLogin(etLoginEmail.text.toString(), etLoginPass.text.toString())
}
}
}
fun doLogin(userEmail: String, userPass: String){
val stringRequest = object : StringRequest(Request.Method.POST, "http://localhost/my_app/login.php",
Response.Listener<String> { response ->
Toast.makeText(applicationContext, response.toString(), Toast.LENGTH_LONG).show()
try {
val obj = JSONObject(response)
startActivity(Intent(this, TabbedHome::class.java))
finish()
Toast.makeText(applicationContext, obj.getString("message"), Toast.LENGTH_LONG).show()
} catch (e: JSONException) {
e.printStackTrace()
Toast.makeText(applicationContext, "please try again", Toast.LENGTH_LONG).show()
}
},
object : Response.ErrorListener {
override fun onErrorResponse(volleyError: VolleyError) {
Toast.makeText(applicationContext, volleyError.message, Toast.LENGTH_LONG).show()
}
}) {
@Throws(AuthFailureError::class)
override fun getParams(): Map<String, String> {
val params = HashMap<String, String>()
params.put("user_email", userEmail)
params.put("user_pass", userPass)
return params
}
}
VolleySingleton.instance?.addToRequestQueue(stringRequest)
}
但是,在我的设备上运行应用程序时,截击代码不起作用。我也没有在日志中得到任何错误。当我点击按钮时,它什么也没做。甚至没有显示任何错误消息。只有一些错误如下E/ANDR-PERF-MPCTL:0号配置文件无效,仅0个总配置文件
我在《邮递员》上试用了我的php代码,效果非常好。这是我的php代码:
<?php
session_start();
require_once 'connection.php';
if($_SERVER["REQUEST_METHOD"]=="POST"){
$user_email = $_POST["user_email"];
$user_pass = $_POST['user_pass'];
}
if ((empty($user_email)) || (empty($user_pass))) {
$response->success = 0;
$response->message = "Field must be filled";
die(json_encode($response));
}
$query = mysqli_query($con, "SELECT * FROM tb_user WHERE user_email='$user_email'");
$row = mysqli_fetch_array($query);
$result = $mysqli->query($row);
$followingdata = $result->fetch_assoc();
$_SESSION['user_id'] = $row['user_id'];
if (password_verify($user_pass, $row['user_pass'])) {
if (!empty($row)){
$response = new usr();
$response->success = 1;
$_SESSION['user_id'] = $_POST['user_id'];
$response->message = "Welcome ".$row['user_name'];
$response->user_id = $row['user_id'];
$response->user_name = $row['user_name'];
$_SESSION['user_id'] = $row['user_id'];
$user_id = $row['user_id'];
die(json_encode($response));
}
} else {
$response->success = 0;
$response->message = "Email or pass is in correct";
die(json_encode($response));
}
mysqli_close($con);
?>
我导入了1个以上的依赖项来传递数据,因为我尝试了所有这些,但没有任何效果
有人能告诉我我做错了什么吗?任何帮助都将不胜感激。非常感谢你 在
php端
您正在解码json
,但在android端
您正在以表单数据
的形式传递参数
所以,要么更改php端的code以接收表单数据
,要么在Android端以原始表单(如JSON)传递数据
要使用POST
请求接收表单数据,请尝试以下代码:
if($_SERVER["REQUEST_METHOD"]=="POST"){
$user_email = $_POST["user_email"];
$user_pass = $_POST['user_pass'];
}
使用上面的代码,您可以在PHP
上发布表单数据 @Dharman谢谢你的警告。我将尝试将其更改为密码哈希。非常感谢@Dharman。我已经将其更改为密码哈希。但我还是找不到解决问题的办法。这里的问题是,即使我的截击代码没有显示任何错误,我的android应用程序也无法连接到数据库。如果你已经更新了PHP代码,但仍然面临问题,那么你应该将你的问题显示在更新的代码中。如果对你有帮助,请接受答案。非常感谢,我刚刚注意到了这一点。但是你能告诉我如何在php端接收表单数据吗?实际上,我是后端新手,所以我对php不太了解。
<uses-permission android:name="android.permission.INTERNET"/>
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'android.arch.lifecycle:extensions:1.1.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
implementation 'com.android.volley:volley:1.1.0'
implementation 'com.squareup.retrofit2:retrofit:2.1.0'
implementation 'com.squareup.retrofit2:converter-gson:2.1.0'
implementation 'com.google.code.gson:gson:2.6.1'
implementation 'com.squareup.okhttp3:okhttp:3.2.0'
implementation "com.squareup.retrofit2:adapter-rxjava2:2.3.0"
implementation "com.squareup.retrofit2:converter-moshi:2.0.0"
implementation "io.reactivex.rxjava2:rxandroid:2.0.1"
implementation 'com.squareup.okhttp3:logging-interceptor:3.4.1'
implementation 'com.android.support:design:28.0.0'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
if($_SERVER["REQUEST_METHOD"]=="POST"){
$user_email = $_POST["user_email"];
$user_pass = $_POST['user_pass'];
}