Android, Developpement
Envoyer des données en POST avec Android hors du main UI
Voici une méthode pour faire un POST sur une page PHP sans bloquer le main UI Thread: Une AsyncTask: private class insertInAppBillingOnline extends AsyncTask<String, Void, String> { final String URL_STRING = « https://mywebsite.com/myphp.php »; /* => HttpResponse response; @Override protected String doInBackground(String… urls) { SimpleDateFormat sdf = new SimpleDateFormat(« yyyy/MM/dd HH:mm:ss »); String currentDateandTime = sdf.format(new Date()); List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair(« date », currentDateandTime)); nameValuePairs.add(new BasicNameValuePair(« deviceid », Secure.getString(getContentResolver(), Secure.ANDROID_ID))); HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(URL_STRING); try { httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); response = httpclient.execute(httppost); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } @Override protected void onPostExecute(String result) { } } Exécution: insertInAppBillingOnline insert = new insertInAppBillingOnline(); insert.execute(); Et le code PHP qui va récupérer les valeurs POST et insérer le tout dans une BDD: $date = $_POST[‘date’]; $deviceid= $_POST[‘deviceid’]; $db_host= »127.0.0.1″; $db_user= »rootuser »; $db_pass= »password »; $db_name= »name »; $con = mysql_connect($db_host, $db_user, $db_pass) mysql_select_db($db_name, $con); mysql_query(« INSERT INTO mytable(DATE, DEVICEID) VALUES (‘$date’, ‘$deviceid’) »); mysql_close($con); Voilà !
Read MoreAndroid, Developpement
Android AsynTask récupérer valeur de la méthode « onPostExecute() »
Voici l’AsynTask qui retourne un boolean: private class verifyInAppBillingOnline extends AsyncTask<Void, Void, Boolean> { Boolean ispremium = false; private verifyInAppBillingOnlineInterface mListener; public verifyInAppBillingOnline(Context context, verifyInAppBillingOnlineInterface mListener){ this.mListener = mListener; } @Override protected Boolean doInBackground(Void… urls) { return ispremium; } @Override protected void onPostExecute(Boolean result) { result = ispremium; } } On crée une interface qui sera exécutée sur le onPostExecute(): public interface verifyInAppBillingOnlineInterface { public void verifyInAppBillingOnlineResult(boolean result); } Puis on déclare l’AsyncTask et on récupère la méthode de l’interface: verifyInAppBillingOnline task = new verifyInAppBillingOnline(Activity.this,new verifyInAppBillingOnlineInterface() { @Override public void verifyInAppBillingOnlineResult(boolean result) { Log.d(« INAPP result », « »+result); if (result == true) { Log.d(« INAPP result », « OK »); ispremium = result; } else { Log.d(« INAPP result », « KO »); ispremium = result; } } }); task.execute(); Voilà !
Read More