【发布时间】:2014-06-27 14:28:24
【问题描述】:
在我的应用程序中,我创建了一个 SQLite 数据库。然后,我使用主要活动中的 HttpAsyncTask 类的实例从 URL 获取的 JSON 数据填充它。这很好,但我也想更新数据库。每天一次将新数据(数据库中的一行)添加到 URL 页面,我想在应用程序中实现一个“同步”按钮,该按钮仅使用新信息更新数据库。我能得到一些关于如何做到这一点的建议吗?我的 HttpAsyncTask 在下面,如果有帮助的话 - 我想我可能需要 onPostExecute() 方法中的 if/else 子句,仅在第一次创建数据库时才添加所有行。我想过尝试在我的 DatabaseHelper 中放置一个 HttpAsyncTask 类,但这并没有什么意义。
private class HttpAsyncTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String...urls) {
return GET(urls[0]);
}
@Override
protected void onPostExecute(String result) {
try {
JSONObject main = new JSONObject(result);
JSONObject body = main.getJSONObject("body");
JSONArray measuregrps = body.getJSONArray("measuregrps");
// get measurements for date, unit, and value (weight)
for (int i = 0; i < measuregrps.length(); i++) {
JSONObject row = measuregrps.getJSONObject(i);
// a lot of getting & parsing data happens
db.addEntry(new Entry(date, weight, null, null));
//adds all the lines every time this is run, but I only want to add all
//the lines once and then add new rows one by one from there
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
public static String GET(String url) {
InputStream is = null;
String result = "";
try {
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(url);
HttpResponse httpResponse = client.execute(get);
is = httpResponse.getEntity().getContent();
if (is != null)
result = convertInputStream(is);
else
result = "Did not work!";
} catch (Exception e) {
Log.d("input stream", e.getLocalizedMessage());
}
return result;
}
private static String convertInputStream(InputStream is) throws IOException {
StringBuilder builder = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line = "";
while((line = reader.readLine()) != null)
builder.append(line);
is.close();
return builder.toString();
}
【问题讨论】:
标签: java android json sqlite http