web-dev-qa-db-fra.com

Comment puis-je récupérer des données d'un serveur Web dans une application Android?

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?

17

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

24
o0rebelious0o

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

1
amalBit

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

0
conorstarrs