我想编写一个Android应用程序,可以显示从Internet资源接收(轮询)的一些数据。
我想我需要编写一些逻辑,定期调用并从某个端点获取数据,解析响应并显示它。所有这些步骤都有一个很好的教程吗?
我对于妈妈的Android编程知之甚少,也许最好从更简单的东西开始。我只是想知道在学习收集一些资源的同时要寻找什么。
答案 0 :(得分:3)
您要做的是开发一个 rest api ,为您的Android应用提供数据。例如。你的网站有一些你想在你的应用程序中使用的内容,然后你可以编写一个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