通过互联网更新Android应用内容?

时间:2010-10-03 12:29:38

标签: android database

我想开发一个Android应用程序,它将从互联网(服务器)获取内容并将其呈现在应用程序中。

(例如,我采取今天的天气预报,将数字放在SQLite数据库或.txt文件中,将数据库/ txt文件放在互联网服务器上,这样当我打开应用程序时,应用程序连接并通过网络下载数据库并告诉我今天的预测)

如果您可以参考我的一些处理此问题的示例/视频教程/书籍,我将非常感谢!

1 个答案:

答案 0 :(得分:2)

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

E.g。 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");
    }
}

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

Painless Threading Multithreading for performance Hello Android Tutorial