com.android.volley.NoConnectionError: java.net.ConnectException: соединение отклонено - PullRequest
0 голосов
/ 21 февраля 2019

Мне нужна помощь.Это мой логин активности, и когда кнопка входа в систему была нажата, он выдает мне ошибку: com.android.volley.NoConnectionError:java.net.ConnectException:Connection refused.Я использую 2 разрешения

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

Здесь указан мой код для входа, вверху у нас есть переменные:

private EditText mPasswordView, mUserName;
    private ProgressBar loading;
    private Button btnLogin;
    private static String URL_LOGIN = "http://localhost/ligacao_bd/login.php";
    private View mProgressView;
    private View mLoginFormView;

Здесь есть моя настройка входа в систему:

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

    loading = findViewById(R.id.loading);


    // Set up the login form.
    mUserName = (EditText) findViewById(R.id.textUserName);
    mPasswordView = (EditText) findViewById(R.id.textPassword);
    btnLogin = (Button) findViewById(R.id.btnLogin); // login button

    btnLogin.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            String email = mUserName.getText().toString().trim();
            String Pwd = mPasswordView.getText().toString().trim();
            if(!email.isEmpty() || !Pwd.isEmpty()){
                Login(email, Pwd);
            }else{
               mUserName.setError("Insira nome de utilizador");
               mPasswordView.setError("Insira palavra-passe");
            }
        }
    });

И есть моя функция входа в систему с JSON:

 private void Login(final String email, final String password) {

    loading.setVisibility(View.VISIBLE);
    btnLogin.setVisibility(View.GONE);
    StringRequest stringRequest = new StringRequest(Request.Method.POST, URL_LOGIN,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                   try {
                       JSONObject jsonObject = new JSONObject(response);
                       String success = jsonObject.getString("Sucesso");
                       JSONArray jsonArray = jsonObject.getJSONArray("login");

                       if(success.equals("1")) {

                            for (int i = 0; i < jsonArray.length(); i++){

                                JSONObject object = jsonArray.getJSONObject(i);

                                String nome = object.getString("nome").trim();
                                String email = object.getString("email").trim();

                                Toast.makeText(LoginActivity.this, "Login efetuado com sucesso\n Bem-Vindo " +nome, Toast.LENGTH_SHORT).show();

                                loading.setVisibility(View.GONE);
                            }
                       }


                   }catch (JSONException e){
                       e.printStackTrace();
                       loading.setVisibility(View.GONE);
                       btnLogin.setVisibility(View.VISIBLE);
                       Toast.makeText(LoginActivity.this, "Erro " + e.toString(), Toast.LENGTH_SHORT).show();

                   }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    loading.setVisibility(View.GONE);
                    btnLogin.setVisibility(View.VISIBLE);
                    Toast.makeText(LoginActivity.this, "Erro " + error.toString(), Toast.LENGTH_SHORT).show();
                }
            })
    {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String, String> params = new HashMap<>();
            params.put("email", email);
            params.put("password", password);
            return params;
        }
    };

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

}

Ответы [ 3 ]

0 голосов
/ 21 февраля 2019

Предполагая, что вы запускаете этот код на эмуляторе Android и что любая вызываемая вами бэкэнд-служба работает и на localhost, измените свой логин-адрес на:

//8080 being the port that localhost is assigned to - change it if needs be
private static String URL_LOGIN = "http://10.0.2.2:8080/ligacao_bd/login.php";

http://10.0.2.2:xxxx IP-адрес, который является специальным псевдонимом для интерфейса обратной связи вашего хоста (127.0.0.1 на вашем компьютере разработчика)

0 голосов
/ 21 февраля 2019

Это запрос рабочей строки с использованием залпа.Измените это, как вам нужно.Если это не работает, то проблема на вашей стороне login.php

loginButton.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    StringRequest request = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>(){
      @Override
      public void onResponse(String s) {
        if(s.equals("Logged In")){
          Intent intent = new Intent(Login.this, Home.class);
          startActivity(intent);
        }
        else{
          Toast.makeText(Login.this, "Incorrect Details", Toast.LENGTH_LONG).show();
        }
      }
    }, new Response.ErrorListener(){
      @Override
      public void onErrorResponse(VolleyError volleyError) {
        Toast.makeText(Login.this, "Some error occurred -> "+volleyError, Toast.LENGTH_LONG).show();;
      }
    }) {
      @Override
      protected Map<String, String> getParams() throws AuthFailureError {
        Map<String, String> parameters = new HashMap<String, String>();
        parameters.put("email", emailBox.getText().toString());
        parameters.put("password", passwordBox.getText().toString());
        return parameters;
      }
    };

    RequestQueue rQueue = Volley.newRequestQueue(Login.this);
    rQueue.add(request);
  }
});
0 голосов
/ 21 февраля 2019

Вам также необходимо запросить разрешение в вашем коде.См .: https://developer.android.com/training/permissions/requesting

Вам нужно только добавить этот код, прежде чем делать веб-запросы:

requestPermission(Manifest.permission.INTERNET, PERMISSION_INTERNET);
requestPermission(Manifest.permission.ACCESS_NETWORK_STATE, PERMISSION_ACCESS_NETWORK_STATE);

И еще где-то этот код:

private static final int PERMISSION_INTERNET = 1;
private static final int PERMISSION_ACCESS_NETWORK_STATE = 2;

private void requestPermission(Manifest.permission permission, int requestId) {
    if (ContextCompat.checkSelfPermission(thisActivity,
        permission)
        != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(thisActivity,
                new String[]{permission},
                requestId);
    }
}

@Override
public void onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults) {
    switch (requestCode) {
        case PERMISSION_INTERNET: {
            if (grantResults.length <= 0
                || grantResults[0] != PackageManager.PERMISSION_GRANTED) {
requestPermission(Manifest.permission.INTERNET, PERMISSION_INTERNET);
            }
            return;
        }
        case PERMISSION_ACCESS_NETWORK_STATE: {
            if (grantResults.length <= 0
                || grantResults[0] != PackageManager.PERMISSION_GRANTED) {
requestPermission(Manifest.permission.ACCESS_NETWORK_STATE, PERMISSION_ACCESS_NETWORK_STATE);
            }
            return;
        }
    }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...