2014-07-03 3 views
-1

Je développe une application mobile dans android, et j'utilise Httpost pour obtenir des informations à partir d'un service web mais ce n'est pas le problème, le problème est que je mets l'action sur un bouton mais cela ne fonctionne jamais c'est mon exemple de codeLe bouton ne répond pas dans une application Android

une solution?

protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_login); 
    setTitle("Connexion"); 

    email = (EditText) this.findViewById(R.id.email); 
    password = (EditText) this.findViewById(R.id.password); 
    cnx = (Button) this.findViewById(R.id.button1); 


    cnx.setOnClickListener(new OnClickListener() 
    { 

    @Override 
    public void onClick(View v) 
    { 

    String em = email.getText().toString(); 
    String ps = password.getText().toString(); 
    String url = getString(R.string.serveur); 

    ArrayList<BasicNameValuePair> nameValuePairs = new ArrayList<BasicNameValuePair>(); 
    nameValuePairs.add(new BasicNameValuePair("email", em)); 
    nameValuePairs.add(new BasicNameValuePair("password", ps)); 

    try 
    { 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost(url+"/UserLogin"); 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
     HttpResponse response = httpclient.execute(httppost); 
     HttpEntity entity = response.getEntity(); 
     InputStream is = entity.getContent(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 
     StringBuilder sb = new StringBuilder(); 
     String line = reader.readLine(); 
     sb.append(line + "\n"); 
     is.close(); 

      /***************************/ 
      /* Résultats de la requête */ 
      /***************************/ 

     String result = sb.toString(); 
     JSONObject jObj = new JSONObject(result); 

     System.out.println(jObj); 
     System.out.println("karim"); 
    } 

    catch(Exception e) {}   

    }  

    }); 

} 

}

+1

Vous pouvez vouloir rea d ceci: http://developer.android.com/training/basics/network-ops/index.html –

+1

Pouvez-vous décrire ce qui se passe lorsque vous cliquez sur le bouton. Quoi qu'il en soit, je pense que Network Activity sur le thread UI n'est pas autorisé à partir d'Android 3.0 et supérieur. Vous devrez le faire avec une tâche Async maintenant. N'oubliez pas non plus d'ajouter les permissions nécessaires dans votre manifeste :) –

Répondre

2

Où est votre classe AsyncTask?

donc vous devez avoir une classe qui étend la classe AsyncTask

private class LongOperation extends AsyncTask<String, Void, String> { 

      @Override 
      protected String doInBackground(String... params) { 

    ArrayList<BasicNameValuePair> nameValuePairs = new ArrayList<BasicNameValuePair>(); 
    nameValuePairs.add(new BasicNameValuePair("email", params[0])); 
    nameValuePairs.add(new BasicNameValuePair("password", params[1])); 

    try 
    { 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost(params[2]+"/UserLogin"); 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
     HttpResponse response = httpclient.execute(httppost); 
     HttpEntity entity = response.getEntity(); 
     InputStream is = entity.getContent(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 
     StringBuilder sb = new StringBuilder(); 
     String line = reader.readLine(); 
     sb.append(line + "\n"); 
     is.close(); 

      /***************************/ 
      /* Résultats de la requête */ 
      /***************************/ 

     String result = sb.toString(); 
     JSONObject jObj = new JSONObject(result); 

     System.out.println(jObj); 
     System.out.println("karim"); 

     return ""; 
    } 

    catch(Exception e) {}   
     return "Error thrown"; 
    }  



      } 

      @Override 
      protected void onPostExecute(String result) { 

       // might want to play with the returned string passed 
       // into onPostExecute() but that is upto you 
      } 

      @Override 
      protected void onPreExecute() {} 

      @Override 
      protected void onProgressUpdate(Void... values) {} 
     } 
    } 

Et votre onClick devrait ressembler à ceci

cnx.setOnClickListener(new OnClickListener() 
{ 

@Override 
public void onClick(View v) 
{ 
      String em = email.getText().toString(); 
      String ps = password.getText().toString(); 
      String url = getString(R.string.serveur); 
      new LongOperation().execute(em, ps, url); 
} 


}); 

Et assurez-vous que vous avez la permission d'Internet dans AndroidManifest

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

+0

c'est du travail merci @Aniruddha –

+0

@ Karim.en Heureux qu'il vous a aidé. Codage heureux :) – Aniruddha

+0

dans votre classe LongOperation vous manquez une déclaration de retour –

Questions connexes