Java 从URL获取JSON数据并重复更新SQLite数据库
在我的应用程序中,我创建了一个SQLite数据库。然后,我在主活动中使用HttpAsyncTask类的实例使用从URL获取的JSON数据填充它。这很好,但我还想更新数据库。每天向URL页面添加一次新数据(数据库中的一行),我想在应用程序中实现一个“同步”按钮,只使用新信息更新数据库。我能得到一些关于如何做的建议吗?下面是我的HttpAsyncTask,如果有帮助的话-我想我可能需要onPostExecute()方法中的if/else子句,它只在第一次创建数据库时添加所有行。我曾想过尝试在我的DatabaseHelper中放置一个HttpAsyncTask类,但这并没有真正意义Java 从URL获取JSON数据并重复更新SQLite数据库,java,android,json,sqlite,http,Java,Android,Json,Sqlite,Http,在我的应用程序中,我创建了一个SQLite数据库。然后,我在主活动中使用HttpAsyncTask类的实例使用从URL获取的JSON数据填充它。这很好,但我还想更新数据库。每天向URL页面添加一次新数据(数据库中的一行),我想在应用程序中实现一个“同步”按钮,只使用新信息更新数据库。我能得到一些关于如何做的建议吗?下面是我的HttpAsyncTask,如果有帮助的话-我想我可能需要onPostExecute()方法中的if/else子句,它只在第一次创建数据库时添加所有行。我曾想过尝试在我的Da
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();
}
私有类HttpAsyncTask扩展异步任务{
@凌驾
受保护的字符串doInBackground(字符串…URL){
返回GET(url[0]);
}
@凌驾
受保护的void onPostExecute(字符串结果){
试一试{
JSONObject main=新的JSONObject(结果);
JSONObject body=main.getJSONObject(“body”);
JSONArray measuregrps=body.getJSONArray(“measuregrps”);
//获取日期、单位和值(重量)的测量值
对于(int i=0;i
您的实施完全取决于项目要求。
如果服务器上不断发生更改,则执行同步过程的正确方法是:
一,。
实现同步过程,它完全在后台工作。此同步将定制为调用同步所需的特定API调用/服务类
二,。
服务器将提示移动客户端更改数据
三,。
要获取服务器更新,将以预定义的间隔运行连续运行的服务/同步,并检查更新或实施GCM
同步适配器将是同步服务的最佳选择。
哦,也别忘了应用内容提供者,因为从UI和后台调用数据库是并发的
希望这有助于作出决定 您必须检查表中是否有类似的可用数据,如果是,请更新表,如果否,请向表中插入新数据对不起,我不应该一直这样说。我只想在用户按下“同步”按钮时获取新数据并更新数据库。我觉得这应该很容易——如果网站的数据行数比我数据库中的行数多出两行,那么添加两行最新的数据。我只是不知道该把代码放在哪里。在Infra下创建服务类,根据需要调用。