Android 应用程序使用来自 Web 服务的数据

标签 android web-services communication

我想编写一个 Android 应用程序,可以显示从互联网资源接收(轮询)的一些数据。

我想我需要编写一些逻辑来定期调用并从某个端点获取数据,解析响应并显示它。对于所有这些步骤有一个很好的教程吗?

目前我对 Android 编程知之甚少,也许最好从更简单的事情开始。我只是想知道在学习时要寻找什么并收集一些相关资源。

最佳答案

您想要做的是开发一个为您的 Android 应用提供数据的 rest api。例如。您的网站有一些您想要在应用程序中使用的内容,那么您可以编写一个 php 脚本,仅以特定格式返回该数据。

例如mysite.net/rest/fetchAllLocations.php?maybe_some_parameters

这将返回位置,例如json 格式,下面是一个示例:

[{"id":1,"shop_lng":8.5317153930664,"shop_lat":52.024803161621,"shop_zipcode":33602,"shop_city":"比勒费尔德","shop_street":"Arndtstra\u00dfe","shop_snumber":3,"shop_name":"M\u00fcller","shop_desc":"Kaufhaus"}]

以下是 REST API 请求的示例:

http://shoqproject.supervisionbielefeld.de/public/gateway/gateway/get-shops-by-city/city/Bielefeld

因此,当您设置好其余 api 后,您就可以使用 Android 手机接收该数据。我使用静态方法来获取此数据:

public class JsonGrabber{

    public static JSONArray receiveData(){  
        String url = "your url";
        String result = "";

        DefaultHttpClient client = new DefaultHttpClient();
        HttpGet method = new HttpGet(url);
        HttpResponse res = null;

        try {
            res = client.execute(method);
        } catch (ClientProtocolException e1) {
            e1.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        }

        try{
            InputStream is = res.getEntity().getContent();
    BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"));
             StringBuilder sb = new StringBuilder();
             String line = null;
             while ((line = reader.readLine()) != null) {
                     sb.append(line + "\n");
             }
             is.close();
             result = sb.toString();
        }catch(Exception e){
             Log.e("log_tag", "Error converting result "+e.toString());
        }

        JSONArray jArray = null;

        try{
             jArray = new JSONArray(result);
        }catch(JSONException e){
                Log.e("log_tag", "Error parsing data "+e.toString());
        }

        return jArray;
    }
}

好了,这就是全部,一旦你有了 json 格式的数据,你只需要解析它:

JSONArray test = (JSONArray) JsonGrabber.receiveData() 

try { 
    for(int i=0;i<test.length();i++){
    JSONObject json_data = test.getJSONObject(i);
    int id = json_data.getInt("id");
    }
}

网络请求应该在另一个线程中运行,因为它可能是一个耗时的过程。所以需要处理AsyncTask。以下是一些资源:

Painless Threading Multithreading for performance Hello Android Tutorial

关于Android 应用程序使用来自 Web 服务的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3846688/

相关文章:

web-services - 移动策略 : How to handle this server-client version permutation?

android - 在 OPENGL 屏幕上添加按钮

android - Building Workspace 遇到问题,eclipse?

c# - xml 解析字符引用 : invalid xmlChar value 0

java - 最接近Java中网页重新加载的等价物

c++ - 当另一方写入管道时,读取管道是否安全?

在C中与WIndows 7上的USB端口通信

Android 中 Activity 与 Fragment 的通信

java - 如何在 eclipse/java/android 中使用 false @Override 编译 java 项目?

android - Google Play Developer Console 为我提供了两个不同轨道的相同选择加入网址