Je souhaite récupérer des données d'un serveur Web dans une application Android sans savoir par où commencer. Devrais-je utiliser les services Web?
Je recommanderais ces tutoriels:
Connectez Android avec PHP et MySql , JSON sous Android et PHP et MySQLi
J'ai utilisé ces tutoriels et j'ai réussi à obtenir ce que vous essayez de faire en travaillant sans trop de difficulté.
Entre eux, ils décrivent chaque étape de la procédure à suivre, l’application Android, la base de données et le serveur Web, et contiennent des informations supplémentaires sur ce que vous pouvez faire pour traiter et utiliser les informations reçues.
La seule chose que je voudrais ajouter est que le tutoriel Connect Android avec PHP et MySql utilise mysql_ en php, qui est obsolète. Mieux vaut utiliser MySqli, c’est pourquoi j’ai inclus le troisième lien.
Le schéma de base de ce que vous voulez faire est le suivant:
1) dans l'application Android, envoyez une requête à un script php de serveur en utilisant une classe comme celle-ci:
import Java.io.BufferedReader;
import Java.io.IOException;
import Java.io.InputStream;
import Java.io.InputStreamReader;
import Java.io.UnsupportedEncodingException;
import Java.util.List;
import org.Apache.http.HttpEntity;
import org.Apache.http.HttpResponse;
import org.Apache.http.NameValuePair;
import org.Apache.http.client.ClientProtocolException;
import org.Apache.http.client.entity.UrlEncodedFormEntity;
import org.Apache.http.client.methods.HttpGet;
import org.Apache.http.client.methods.HttpPost;
import org.Apache.http.client.utils.URLEncodedUtils;
import org.Apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;
import Android.util.Log;
public class JSONParser {
// Response from the HTTP Request
static InputStream httpResponseStream = null;
// JSON Response String to create JSON Object
static String jsonString = "";
// Method to issue HTTP request, parse JSON result and return JSON Object
public JSONObject makeHttpRequest(String url, String method,
List<NameValuePair> params) {
try {
// get a Http client
DefaultHttpClient httpClient = new DefaultHttpClient();
// If required HTTP method is POST
if (method == "POST") {
// Create a Http POST object
HttpPost httpPost = new HttpPost(url);
// Encode the passed parameters into the Http request
httpPost.setEntity(new UrlEncodedFormEntity(params));
// Execute the request and fetch Http response
HttpResponse httpResponse = httpClient.execute(httpPost);
// Extract the result from the response
HttpEntity httpEntity = httpResponse.getEntity();
// Open the result as an input stream for parsing
httpResponseStream = httpEntity.getContent();
}
// Else if it is GET
else if (method == "GET") {
// Format the parameters correctly for HTTP transmission
String paramString = URLEncodedUtils.format(params, "utf-8");
// Add parameters to url in GET format
url += "?" + paramString;
// Execute the request
HttpGet httpGet = new HttpGet(url);
// Execute the request and fetch Http response
HttpResponse httpResponse = httpClient.execute(httpGet);
// Extract the result from the response
HttpEntity httpEntity = httpResponse.getEntity();
// Open the result as an input stream for parsing
httpResponseStream = httpEntity.getContent();
}
// Catch Possible Exceptions
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
// Create buffered reader for the httpResponceStream
BufferedReader httpResponseReader = new BufferedReader(
new InputStreamReader(httpResponseStream, "iso-8859-1"), 8);
// String to hold current line from httpResponseReader
String line = null;
// Clear jsonString
jsonString = "";
// While there is still more response to read
while ((line = httpResponseReader.readLine()) != null) {
// Add line to jsonString
jsonString += (line + "\n");
}
// Close Response Stream
httpResponseStream.close();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
try {
// Create jsonObject from the jsonString and return it
return new JSONObject(jsonString);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
// Return null if in error
return null;
}
}
}
Qui gère la communication, ouvre une connexion et reçoit une chaîne JSON qu’il traite ensuite en un objet JSON.
2) dans le serveur php, ouvrez une connexion mysqli à votre base de données SQL, lancez mysqli-> query () et effectuez les opérations suivantes avec le résultat:
if (mysqli_num_rows($result) > 0) {
// looping through all results
$response["apps"] = array();
while ($row = mysqli_fetch_array($result)) {
$apps = array();
$apps["name"] = $row["name"];
$apps["package"] = $row["package"];
$apps["version"] = $row["version"];
$apps["dateversion"] = $row["dateversion"];
$apps["sdkver"] = $row["sdkver"];
$apps["pathroot"] = $row["pathroot"];
$apps["rootname"] = $row["rootname"];
$apps["apkmd5"] = $row["apkmd5"];
$apps["extraapkmd5"] = $row["extraapkmd5"];
$apps["instructionsmd5"] = $row["instructionsmd5"];
$apps["assetsmd5"] = $row["assetsmd5"];
$apps["root"] = $row["root"];
$apps["current"] = $row["current"];
// Push single product into final response array
array_Push($response["apps"], $apps);
}
// success
$response["success"] = 1;
// echoing JSON response
echo json_encode($response);
Cela effectue une itération dans la réponse de la base de données et l'encode dans une chaîne JSON qui est renvoyée à l'application Android qui peut ensuite la traiter.
Comment créer quelque chose comme ceci est expliqué dans les tutoriels liés
Vous devez d’abord choisir entre le service Web que vous allez utiliser.
Ensuite, trouvez le type qui répondra le mieux à vos besoins.
Selon moi, la façon la plus simple d’analyser json, xml ou soap est la suivante (avec lien de tutoriel):
Json: monture Jackson
xml: Simple framework
soap: cadre ksoap2
Cela ne répondra pas directement à votre question, mais puisque vous avez demandé par où commencer, vous devez commencer correctement en créant vos requêtes Web dans une AsyncTask. Cela vous permettra de faire vos demandes dans un thread séparé et de définir les données sur l'interface utilisateur.
AsyncTasks utilise un pool de threads et la file d'attente de travail facilite également la mise à jour de l'utilisateur sur la progression. Il y a quelques bons exemples ici: Exemple AsyncTask Android