com.android.okhttp上的java.io.Exception意外终止流

com.android.okhttp上的java.io.Exception意外终止流,java,amazon-web-services,android-studio,amazon-ec2,okhttp,Java,Amazon Web Services,Android Studio,Amazon Ec2,Okhttp,我目前在安卓工作室工作。只是尝试制作一个应用程序来注册帐户,并使用lampstack将数据保存在数据库中 我使用的代码适用于localhost(我使用的是XAMPP),它将数据发布到数据库 然而,当我在AWS上将URL更改为我的EC2机器时,应用程序显示“java.io.Exception Unexpected End Of Stream on com.android.okhttp”,并且没有将数据发布到数据库。我测试并验证了URL是否正确 对于这个问题,我还应该尝试什么?任何帮助都将不胜感激

我目前在安卓工作室工作。只是尝试制作一个应用程序来注册帐户,并使用lampstack将数据保存在数据库中

我使用的代码适用于localhost(我使用的是XAMPP),它将数据发布到数据库

然而,当我在AWS上将URL更改为我的EC2机器时,应用程序显示“java.io.Exception Unexpected End Of Stream on com.android.okhttp”,并且没有将数据发布到数据库。我测试并验证了URL是否正确

对于这个问题,我还应该尝试什么?任何帮助都将不胜感激

这是应用程序界面

代码如下:


package com.example.androidphp;
导入androidx.appcompat.app.appcompat活动;
导入android.app.ProgressDialog;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.Toast;
导入com.android.volley.AuthFailureError;
导入com.android.volley.Request;
导入com.android.volley.RequestQueue;
导入com.android.volley.Response;
导入com.android.volley.VolleyError;
导入com.android.volley.toolbox.StringRequest;
导入com.android.volley.toolbox.volley;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.util.HashMap;
导入java.util.Map;
公共类MainActivity扩展AppCompatActivity实现View.OnClickListener{
私有的EditText用户名、editTextEmail、editTextPassword;
私人按钮注册表;
私有进程对话;
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editTextEmail=(EditText)findViewById(R.id.editTextEmail);
editTextUserName=(EditText)findViewById(R.id.editTextUserName);
editTextPassword=(EditText)findViewById(R.id.editTextPassword);
buttonRegister=(按钮)findViewById(R.id.buttonRegister);
progressDialog=新建progressDialog(此);
buttonRegister.setOnClickListener(此);
}
私有无效注册器(){
最终字符串email=editTextEmail.getText().toString().trim();
最终字符串用户名=editTextUserName.getText().toString().trim();
最终字符串密码=editTextPassword.getText().toString().trim();
progressDialog.setMessage(“注册用户…”);
progressDialog.show();
//截击
StringRequest StringRequest=新StringRequest(Request.Method.POST,
Constants.URL\u寄存器,
新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
progressDialog.disclose();
试一试{
JSONObject JSONObject=新JSONObject(响应);
Toast.makeText(getApplicationContext(),jsonObject.getString(“消息”),
Toast.LENGTH_LONG).show();
}捕获(JSONException e){
e、 printStackTrace();
}
}
},
新的Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
progressDialog.hide();
Toast.makeText(getApplicationContext(),error.getMessage(),Toast.LENGTH_LONG.show();
}
}){
@凌驾
受保护的映射getParams()引发AuthFailureError{
Map params=新的HashMap();
参数put(“用户名”,用户名);
参数put(“电子邮件”,电子邮件);
参数put(“密码”,密码);
返回参数;
}
};
RequestQueue RequestQueue=Volley.newRequestQueue(this);
添加(stringRequest);
}
@凌驾
公共void onClick(视图v){
如果(v==按钮注册表)
registerUser();
}
}

我的安卓10设备也有同样的问题,如果您的协议url是
http
,您必须在清单中添加
android:usesCleartextTraffic=“true”

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:usesCleartextTraffic="true"
        android:theme="@style/AppTheme">

</Application>
然后在您的xml文件夹中创建您的xml文件,并应如下所示,以启用所有不加密的请求:

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

secure.example.com
请参阅此链接以了解更多信息:——

 <application android:networkSecurityConfig="@xml/network_security_config">
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="false">
        <domain includeSubdomains="true">secure.example.com</domain>
    </domain-config>
</network-security-config>