Я хочу получить данные с веб-сервера в приложении Android и не знаю с чего начать. Должен ли я использовать веб-службы?
Как я могу получить данные с веб-сервера в приложении Android?
Ответ 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