如何解决java.net.SocketException: socket failed: EPERM (Operation not permitted)错误。

3
当我使用Android Studio创建一个简单的本地数据库注册时,遇到了标题上显示的问题,以下是我的代码:
public class registerInterface extends AppCompatActivity {
    private EditText editTextUsername, editTextPassword, editTextEmail;
    private Button buttonRegister, backToLogin;
    private ProgressDialog progressDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.registration_interface);
        editTextUsername = findViewById(R.id.username);
        editTextPassword = findViewById(R.id.password);
        editTextEmail = findViewById(R.id.email);

        buttonRegister = findViewById(R.id.register);
        backToLogin = findViewById(R.id.go_back_login);

        progressDialog = new ProgressDialog(this);

        buttonRegister.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                registerUser();
            }
        });

    }

    public void registerUser(){
        final String email = editTextEmail.getText().toString().trim();
        final String password = editTextPassword.getText().toString().trim();
        final String username = editTextUsername.getText().toString().trim();

        progressDialog.setMessage("Registering...");
        progressDialog.show();

        StringRequest stringRequest = new StringRequest(Request.Method.POST, DataBaseConstants.URL_REGISTER, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                progressDialog.dismiss();
                try {
                    JSONObject jsonObject = new JSONObject(response);
                    Toast.makeText(getApplicationContext(), jsonObject.getString("message"), Toast.LENGTH_LONG).show();
                } catch (JSONException e){
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                progressDialog.hide();
                Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();

            }
        }){
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<>();
                params.put("username", username);
                params.put("email", email);
                params.put("password", password);
                return params;
            }
        };

        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(stringRequest);
    }
}

我已经在我的AndroidManifest.xml中添加了这些内容,但仍然无法正常工作:
<uses-permission android:name="android.promission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

我不知道是否与IP地址有关,但我就是想不明白。

4个回答

9

第一

只需要从模拟器中卸载应用程序,然后再次运行它,它就会正常工作。我曾遇到过同样的问题。

有时这个问题是由于模拟器出现问题引起的。

第二 -

可能是你的网络出了问题,在模拟器中连接的wifi不允许你连接到调用的api。


谢谢,但我已经尝试过这种方法了,但还是不起作用... - singzhou1999
我认为问题出在你的网络上。你连接到模拟器的Wi-Fi不允许你连接到你正在调用的API。 - Dipankar Baghel
请问你能给我展示更多关于你所说的内容吗?我对我的模拟器中的wifi设置出了什么问题完全不清楚。 - singzhou1999
1
卸载并重新安装应用程序对我来说起作用了。谢谢@DipankarBaghel - Sharad
模拟器对我来说是个问题 - Lucian Iacob
模拟器对我来说是个问题 - undefined

0

嗨,我找到了解决办法。问题出在虚拟设备上,在我的 API 29 版本中,网络连接被禁止。我推荐使用第三方虚拟设备,现在我正在使用“网易MUMU”,如果你遇到类似的问题,可以试试看。


0

从模拟器中卸载应用程序并不能解决问题。您需要先关闭模拟器,然后卸载应用程序并重新构建它。至少对我来说是这样有效的。


0
你绝对可以像我一样解决这个问题。按照以下步骤操作:
  1. 创建一个模拟器的副本。
  2. 删除第一个模拟器。
  3. 重新启动Android Studio。
这样你的问题应该就解决了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接