首页 > 解决方案 > 没有指定网络安全配置,使用平台默认的android登录设计

问题描述

这是我第一次提出问题,因为我真的遇到了一个大问题,我正在开发一个可以与远程服务器通信的android登录/注册页面,我遵循了一些教程,但即使我也无法得到理想的结果跟着很多教程,我希望有人可以帮助我,

这是我的代码,我首先在localhost中创建了一个mysql数据库,我编写了以下php代码来连接android应用程序和dababase:

<?php
$con = mysqli_connect("localhost", "myaccount", "mypassword", "mytest");

$name = $_POST["name"];
$age = $_POST["age"];
$username = $_POST["username"];
$password = $_POST["password"];

$statement = mysqli_prepare($con, "INSERT INTO user (name, username, age, password) VALUES (?, ?, ?, ?)");
mysqli_stmt_bind_param($statement, "siss", $name, $username, $age, $password);
mysqli_stmt_execute($statement);

$response = array();
$response["success"] = true;  

echo json_encode($response);
?>

然后我创建了一个使用volley框架处理数据库的android应用程序,这是“注册”按钮的代码,当我填写信息并单击它时,我希望它可以发送数据tp mysql,

RegisterButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final String name = etName.getText().toString();
            final String username = etUsername.getText().toString();
            final int age = Integer.parseInt(etAge.getText().toString());
            final String password = etPassword.getText().toString();

            Response.Listener<String> responseListener = new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try {
                        JSONObject jsonResponse = new JSONObject(response);
                        boolean success = jsonResponse.getBoolean("success");
                        if (success) {
                            Intent intent = new Intent(RegisterActivity.this, LoginActivity.class);
                            RegisterActivity.this.startActivity(intent);
                        } else {
                            AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
                            builder.setMessage("Register Failed")
                                    .setNegativeButton("Retry", null)
                                    .create()
                                    .show();
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            };

            RegisterRequest registerRequest = new RegisterRequest(name, username, age, password, responseListener);
            RequestQueue queue = Volley.newRequestQueue(RegisterActivity.this);
            queue.add(registerRequest);
        }
    });  

我还列出了RegisterRequest功能代码如下:

public class RegisterRequest extends StringRequest {
private static final String REGISTER_REQUEST_URL = "http://my computer ipv4/Register11.php";
private Map<String, String> params;

public RegisterRequest(String name, String username, int age, String password, Response.Listener<String> listener) {
    super(Method.POST, REGISTER_REQUEST_URL, listener, null);
    params = new HashMap<>();
    params.put("name", name);
    params.put("age", age + "");
    params.put("username", username);
    params.put("password", password);
}

@Override
public Map<String, String> getParams() {
    return params;
}
}  

我个人认为我已经完成了所有需要的信息,但是当我测试我的andriod应用程序时,我无法将数据发送到数据库,我已经检查了一整天的代码仍然无法解决它,我在这里发布我的register页面, <br> 注册页面完成信息后注册页面

当我单击“注册”按钮时,应用程序将发出警告

No Network Security Config specified, using platform default  

我明白这不是错误,但我的应用程序在这里停止了,我的意思是,当我点击按钮时,应用程序没有响应,只显示上述警告,而且信息没有发送到数据库,我已经尝试解决搞了好久,还是报错,希望有人能帮帮我。我将不胜感激!

标签: androidandroid-volley

解决方案


从 Google 的网络安全配置文档中,您可以通过添加以下内容来解决此问题 -

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    ...
    <application
        ...
        android:usesClearTextTraffic="true"
        ...>
        ...
    </application>
</manifest>  

到您的 AndroidManifest.xml 文件

有关更多信息,您可以在此处查看 Google 文档,以便网络安全配置 - “ https://developer.android.com/training/articles/security-config


推荐阅读