20

我想从 android 应用程序中的 web 服务器检索数据,但不知道从哪里开始。我应该使用网络服务吗?

4

3 回答 3

25

我会推荐这些教程:

将android与PHP和MySqlAndroid中的JSON以及PHP和MySQLi连接起来

我使用了这些教程并设法轻松地完成了您想要做的工作。

在它们之间,它们描述了如何在每个阶段尝试执行的每个步骤、android 应用程序、数据库和 Web 服务器端,并包含额外的信息,用于处理和使用接收到的信息。

我唯一要补充的是,Connect android with PHP and MySql 教程在 php 中使用了 mysql_,但已弃用。使用 MySqli 更好,这就是我包含第三个链接的原因。

你想要做的基本轮廓是这样的:

1)在android应用程序中使用这样的类向服务器php脚本发出请求:

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 服务器中,打开与 SQL 数据库的 mysqli 连接,运行 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 应用程序,然后该应用程序可以对其进行处理。

如何创建这样的东西在链接的教程中都有解释

于 2013-05-14T15:05:14.893 回答
1

首先,您必须在要使用的 Web 服务之间进行选择。
然后找到最适合您需求的类型。
据我说,解析json、xml或soap的最简单方法如下(附教程链接):
Json:Jackson框架工作
xml:简单框架
soap:ksoap2框架

于 2013-05-14T14:17:55.033 回答
0

This won't directly answer your question but since you've asked where to start you should start correctly by building your web requests in an AsyncTask. This will allow you to make your requests in a seperate thread, and set the data on the UI.

AsyncTasks use a thread pool and work queue also make it easy to update the user on the progress. There are some good examples here: AsyncTask Android example

于 2013-05-14T15:00:52.497 回答