Подтвердить что ты не робот

Как я могу получить данные с веб-сервера в приложении Android?

Я хочу получить данные с веб-сервера в приложении Android и не знаю с чего начать. Должен ли я использовать веб-службы?

4b9b3361

Ответ 1

Я бы порекомендовал эти учебники:

Подключить Android с PHP и MySql, JSON в android и PHP и MySQLi

Я использовал эти обучающие программы и сумел получить то, что вы пытаетесь сделать, работая без особых трудностей.

Между ними они описывают каждый шаг в том, как делать то, что вы пытаетесь на каждом этапе, приложение Android, базу данных и веб-сервер, и содержит дополнительную информацию, которую вы можете сделать для обработки и использования полученной информации

Единственное, что я хотел бы добавить, это то, что Connect android с PHP и MySql-учебником использует mysql_ в php, который устарел. Гораздо лучше использовать MySqli, поэтому я включил третью ссылку.

Основной контур того, что вы хотите сделать, это следующее:

1) в приложении Android вывести запрос на сервер php script с помощью такого класса:

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;
        }
    }
}

Что обрабатывает связь, открывает соединение и получает строку JSON, которая затем обрабатывается в объект JSON.

2) на php-сервере откройте соединение mysqli с вашей базой данных SQL, запустите mysqli- > query() и выполните с результатом следующее:

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);

Это выполняется с помощью ответа базы данных и кодирует его в строку JSON, которая отправляется обратно в приложение Android, которое затем может обрабатывать его.

Как создать что-то вроде этого все объяснено в связанных уроках

Ответ 2

Сначала вам нужно выбрать между веб-сервисом, который вы собираетесь использовать.
Затем найдите, какой тип будет наилучшим образом удовлетворять ваши потребности.
По мне, самый простой способ разобрать json, xml или soap следует следующим образом (с помощью учебной ссылки):
   Json: работа с кадром Джексона
   xml: Простая структура
   soap: ksoap2 framework

Ответ 3

Это не будет напрямую отвечать на ваш вопрос, но поскольку вы спросили, с чего начать, вы должны начать правильно, создав свои веб-запросы в AsyncTask. Это позволит вам делать ваши запросы в отдельном потоке и устанавливать данные в пользовательском интерфейсе.

AsyncTasks использует пул потоков, а рабочая очередь также упрощает обновление пользователя в ходе выполнения. Здесь есть несколько хороших примеров: Пример Android AsyncTask