Php 用字符串请求截取传递数据在Android Kotlin中不起作用

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

所以我尝试将我的android应用程序与我存储在Phpmyadmin中的数据库连接起来。我使用截击,因为很多人都推荐这种方式。我遵循了一些教程,最终得到了以下代码:

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']; 
}