2
votes

com.android.volley.NoConnectionError: java.net.ConnectException: connexion refusée

J'ai besoin d'aide. Ceci est la connexion de mon activité, et lorsque le bouton de connexion a été cliqué, il me donne une erreur: com.android.volley.NoConnectionError: java.net.ConnectException: Connection refusée . J'utilise 2 permissions

 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);

}

Il y a mon code de connexion, en haut nous avons les variables:

@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");
            }
        }
    });

Il y a mon bouton de configuration de connexion :

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;

Et il y a ma fonction de connexion avec JSON, notamment:

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


0 commentaires

3 Réponses :


0
votes

vous devez également demander l'autorisation dans votre code. Voir: https://developer.android.com/training/permissions/requesting Il vous suffit d'ajouter ce code, avant de faire les requêtes web:

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;
        }
    }
}

Et ailleurs ce code:

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


2 commentaires

@ JoãoCosta Désolé, je n'ai pas testé le code, car je n'ai pas Android Studio sur cette machine. J'ai remarqué que dans certaines versions, vous devez supprimer la variable "thisActivity". Vous avez d'autres erreurs?


"Manifest" et dans les variables



4
votes

En supposant que vous exécutez ce code sur un émulateur Android et que le service backend que vous appelez fonctionne également sur l'hôte local, changez votre adresse de connexion en:

//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 est l'adresse IP qui est un alias spécial de votre interface de bouclage hôte (127.0.0.1 sur votre machine de développement)


9 commentaires

j'utilise localhost


Oui, alors changez votre URL de connexion à ce que j'ai dit dans ma réponse et essayez cela. Laissez-moi savoir si cela fonctionne


maintenant j'ai cette erreur: com.android.volley.TimeoutError


@ JoãoCosta vous avez peut-être activé votre pare-feu. Cela peut être dû à l'activation d'un pare-feu. Vérifiez si votre pare-feu est désactivé, sinon, désactivez-le et réessayez


Essayez ceci: stringRequest.setRetryPolicy (new DefaultRetryPolicy (20000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); avant de l'ajouter à la file d'attente des demandes


toujours la même erreur, mais maintenant il reste comme 30 secondes de chargement, mais toujours l'erreur: com.android.volley.TimeoutError


peut-être que le problème est sur login.php?


Si vous atteignez votre point de terminaison avec une demande de publication, en publiant l'e-mail et le mot de passe corrects, quelle réponse obtenez-vous?


@ JoãoCosta voir ma nouvelle réponse. Si vous modifiez cela pour utiliser vos noms de variables, et que cela ne fonctionne toujours pas, le problème est alors sur vous login.php



0
votes

Ceci est une requête de chaîne de travail utilisant volley. Changez cela selon vos besoins. Si cela ne fonctionne pas, alors le problème est sur votre côté 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 commentaires