Android/改造:应用程序不通过http进行通信,仅通过https进行通信

Android/改造:应用程序不通过http进行通信,仅通过https进行通信,android,http,https,retrofit,Android,Http,Https,Retrofit,我正在尝试创建一个Android应用程序,它将通过http协议与服务器通信。我正在使用改装向服务器发送GET请求,但我始终收到以下错误: java.net.UnknownServiceException: CLEARTEXT communication to http://demo5373349.mockable.io/ not permitted by network security policy 虽然在尝试通过https访问服务器时不存在这样的问题,但我也将编写服务器端,我应该使用htt

我正在尝试创建一个Android应用程序,它将通过http协议与服务器通信。我正在使用改装向服务器发送GET请求,但我始终收到以下错误:

java.net.UnknownServiceException: CLEARTEXT communication to http://demo5373349.mockable.io/ not permitted by network security policy
虽然在尝试通过https访问服务器时不存在这样的问题,但我也将编写服务器端,我应该使用http

代码如下:

private TextView textView;
private EditText editText;
private Button getButton;
private Retrofit retrofit;
private ServerConnection connection;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    retrofit = new Retrofit.Builder()
            .baseUrl("http://demo5373349.mockable.io/")
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    connection = retrofit.create(ServerConnection.class);

    textView = findViewById(R.id.textView);
    editText = findViewById(R.id.editText);
    getButton = findViewById(R.id.buttonGET);
    getButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            getHandler();
        }
    });

}

private void getHandler(){
    connection.sendGET().enqueue(new Callback<Message>() {
        @Override
        public void onResponse(Call<Message> call, Response<Message> response) {
            if(response.isSuccessful()) {
                textView.setText(response.body().toString());
            }else {
                textView.setText("Server Error");
            }
        }

        @Override
        public void onFailure(Call<Message> call, Throwable t) {
            textView.setText("Connection Error");
        }
    });
}
private TextView TextView;
私人编辑文本;
私人按钮;
私人改装;
专用服务器连接;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
改装=新改装.Builder()
.baseUrl(“http://demo5373349.mockable.io/")
.addConverterFactory(GsonConverterFactory.create())
.build();
connection=reformation.create(ServerConnection.class);
textView=findViewById(R.id.textView);
editText=findViewById(R.id.editText);
getButton=findViewById(R.id.buttonGET);
getButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
getHandler();
}
});
}
私有void getHandler(){
connection.sendGET().enqueue(新的回调函数(){
@凌驾
公共void onResponse(调用、响应){
if(response.issusccessful()){
textView.setText(response.body().toString());
}否则{
setText(“服务器错误”);
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
setText(“连接错误”);
}
});
}
以及界面:

public interface ServerConnection {
    @GET("./")
    Call<Message> sendGET();
}
公共接口服务器连接{
@获取(“./”)
调用sendGET();
}
从Android 9.0(SDK 28)开始,默认情况下禁用使用明文网络通信。看

您有几个选项,按安全首选项的顺序排列:

  • 将所有网络访问更改为使用HTTPS
  • 将网络安全配置文件添加到项目中
  • 通过向清单中的应用程序添加
    android:usesCleartextTraffic=“true”
    来启用应用程序的明文支持
要将网络安全文件添加到项目中,需要做两件事。您需要将文件规范添加到清单:

<application android:networkSecurityConfig="@xml/network_security_config" .../>

其次,创建文件res/xml/network\u security\u config.xml并指定您的安全需求:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">insecure.example.com</domain>
    </domain-config>
</network-security-config>

unsecure.example.com
从Android 9.0(SDK 28)开始,默认情况下禁用使用明文网络通信。看

您有几个选项,按安全首选项的顺序排列:

  • 将所有网络访问更改为使用HTTPS
  • 将网络安全配置文件添加到项目中
  • 通过向清单中的应用程序添加
    android:usesCleartextTraffic=“true”
    来启用应用程序的明文支持
要将网络安全文件添加到项目中,需要做两件事。您需要将文件规范添加到清单:

<application android:networkSecurityConfig="@xml/network_security_config" .../>

其次,创建文件res/xml/network\u security\u config.xml并指定您的安全需求:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">insecure.example.com</domain>
    </domain-config>
</network-security-config>

unsecure.example.com

发布您的改装代码您使用的是哪个android版本?这可能会有帮助@SamiIkhleaf谢谢,它解决了我的问题!Android 9-发布您的改装代码您使用的是哪个Android版本?这可能会帮助@SamiIkhleaf谢谢,它解决了我的问题!安卓9-