2 votes

Android PHP enregistrement des utilisateurs

Je suis nouveau sur Android, comment puis-je insérer des valeurs d'Android vers php mysql ? J'ai essayé le code suivant qui ne montre aucune erreur mais ne fonctionne pas. Je n'ai pas de problème avec l'utilisation d'Android.

public class MainActivity extends Activity{

    EditText username, email, password;
    Button btn;
    HttpResponse response;

    public void onCreate(Bundle savedInstanceState){

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        username = (EditText) findViewById(R.id.usr_name);
        email = (EditText) findViewById(R.id.email);
        password = (EditText) findViewById(R.id.password);

        btn = (Button) findViewById(R.id.regbtn);
        btn.setOnClickListener(new View.OnClickListener(){

            public void onClick(View v){

                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost("http://10.0.2.2/androidtest.php");

                try{

                    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                    nameValuePairs.add(new BasicNameValuePair("uname", username.toString()));
                    nameValuePairs.add(new BasicNameValuePair("email", email.getText().toString()));
                    nameValuePairs.add(new BasicNameValuePair("password", password.getText().toString()));

                    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                    response = httpclient.execute(httppost);

                }catch(Exception e){
                    e.printStackTrace();
                }
            }
        });
    }

}

0voto

jan1337z Points 2088

J'ai testé votre exemple sur ma machine virtuelle locale et pour moi il y avait "06-01 00:22:17.671 : W/System.err(2024) : Android.os.NetworkOnMainThreadException" comme je l'ai déjà dit.

Ne faites pas de mise en réseau sur le fil principal.

Un (autre) exemple d'utilisation des tâches asynchrones est postet ici .

Les tâches asynchrones sont exécutées parallèlement au fil d'exécution principal, de sorte qu'elles ne bloquent PAS le fil d'exécution principal. Le blocage du thread principal est mauvais car il empêche, par exemple, l'interface utilisateur d'être redessinée / l'interface ne peut pas gérer les entrées.
C'est pourquoi Android lance une exception NetworkOnMainThreadException pour vous empêcher de faire du réseautage (une tâche qui prend du temps) sur le fil d'exécution principal.

Un exemple de mise en œuvre peut être trouvé ici .

0voto

James andresakis Points 1060

Cela ne fonctionne probablement pas parce que vous essayez d'envoyer votre message à php sur le fil principal de l'interface utilisateur. Essayez de mettre votre code dans une tâche asynchrone comme ceci

class Task extends AsyncTask<Void, Void, Void>{

    @Override
    protected void doInBackground(Void... params){

    HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://10.0.2.2/androidtest.php");

            try{

                ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                nameValuePairs.add(new BasicNameValuePair("uname", username.toString()));
                nameValuePairs.add(new BasicNameValuePair("email", email.getText().toString()));
                nameValuePairs.add(new BasicNameValuePair("password", password.getText().toString()));

                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                response = httpclient.execute(httppost);

            }catch(Exception e){
                e.printStackTrace();
            }
    }
}

Ensuite, appelez-le comme suit

new Task().execute();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X