Mon problème est que lorsque j'exécute mon application sur un véritable appareil mobile, l'erreur suivante s'affiche: com.android.volley.TimeoutError ". Cependant, cela fonctionne parfaitement en utilisant l'émulateur de studio Android. En raison du fait que doit du temps où cette erreur est causée par des problèmes de connectivité, est-ce que j'utilise l'ip correect pour mon application? ie
"Private static String URL_REGIST =" http://10.0.2.2:81/android_register_login/register.php "; "
Je suis nouveau dans le développement d'applications, donc toute aide serait grandement appréciée. Voici le code pour register.java qui utilise le script register.php qui est utilisé pour effectuer l'enregistrement
private EditText name,email,password,c_password; private Button btn_regist; private ProgressBar loading; private static String URL_REGIST ="http://10.0.2.2:81/android_register_login/register.php"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); loading = findViewById(R.id.loading); name= findViewById(R.id.name); email = findViewById(R.id.email); password = findViewById(R.id.password); c_password = findViewById(R.id.c_password); btn_regist =findViewById(R.id.btn_regist); btn_regist.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Regist(); } }); } private void Regist(){ loading.setVisibility(View.VISIBLE); btn_regist.setVisibility(View.GONE); final String name = this.name.getText().toString().trim(); final String email = this.email.getText().toString().trim(); final String password = this.password.getText().toString().trim(); StringRequest stringRequest = new StringRequest(Request.Method.POST, URL_REGIST, new Response.Listener<String>() { @Override public void onResponse(String response) { try { JSONObject jsonObject = new JSONObject(response); String success = jsonObject.getString("success"); if(success.equals("1")){ Toast.makeText(RegisterActivity.this, "Account Created",Toast.LENGTH_SHORT).show(); loading.setVisibility(View.GONE); } }catch (JSONException e) { e.printStackTrace(); Toast.makeText(RegisterActivity.this, "Register Error!" + e.toString(),Toast.LENGTH_SHORT).show(); loading.setVisibility(View.GONE); btn_regist.setVisibility(View.VISIBLE); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Toast.makeText(RegisterActivity.this, "Register Error!" + error.toString(),Toast.LENGTH_SHORT).show(); loading.setVisibility(View.GONE); btn_regist.setVisibility(View.VISIBLE); } }) { @Override protected Map<String, String> getParams() throws AuthFailureError { Map<String, String> params = new HashMap<>(); params.put("name", name); params.put("email", email); params.put("password", password); return params; } }; RequestQueue requestQueue = Volley.newRequestQueue(this); requestQueue.add(stringRequest); }
}
3 Réponses :
C'est la mauvaise adresse IP. 10.0.2.2 ne fonctionnera que sur les émulateurs, car c'est l'adresse IP du réseau privé entre l'hôte et l'émulateur. Pour le wifi, vous devez utiliser la véritable adresse IP et vous assurer que le réseau wifi est configuré pour autoriser les connexions entrantes sur cet IP / port. Pour le cellulaire, vous devez vous assurer que c'est le cas jusqu'à votre FAI
Merci pour ces informations, donc si je remplace 10.0.2.2 par mon adresse IPv4 cela devrait fonctionner?
J'ai effectué l'opération que vous avez suggérée, mais cette fois, l'erreur se produit à la fois sur l'émulateur et sur mon appareil mobile. Cependant, l'erreur est com.android.volley.ClientError, est-ce que c'est parce que je dois désactiver mon pare-feu?
Si vous testez dans Android 9 Pie, vous devrez définir un networkSecurityConfig dans votre balise Manifest application
pour autoriser toutes les connexions réseau HTTP et HTTPS. Vérifiez également si vous avez fourni l'autorisation INTERNET.
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates src="system" /> </trust-anchors> </base-config> </network-security-config>
Ensuite, dans votre dossier xml, vous devez maintenant créer un fichier nommé network_security_config exactement comme vous l'avez nommé dans le manifeste et à partir de là, le fichier le contenu de votre fichier doit être comme ceci pour activer toutes les requêtes sans chiffrement:
<?xml version="1.0" encoding="utf-8"?> <manifest ... > <application android:networkSecurityConfig="@xml/network_security_config"> </application> </manifest>
Dans mon manifeste, j'ai inclus ces deux lignes: 1) android: usesCleartextTraffic = "true" 2)
L'erreur est probablement due à un problème de connectivité. https://10.0.2.2 doit être votre adresse IP d'hôte local. L'application exécutée sur votre appareil Android ne peut pas se connecter à un serveur localhost.
Solutions: