我目前正在开发一个应用程序,它需要从服务器获取数据并存储在我的本地数据库中。为了确保这段代码只运行一次我正在执行以下操作。
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
boolean dialogShown = settings.getBoolean("dialogShown", false);
if (!dialogShown) {
//Asyntask executed here
if (haveNetworkConnection()) {
new xyz().execute();
} else {
Toast.makeText(getApplicationContext(), "Sorry... No Internet Connection", Toast.LENGTH_LONG).show();
}
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("dialogShown", true);
editor.apply();
}
上面我正在设置共享首选项,以便它只执行一次。现在问题是,如果没有互联网连接,将执行共享首选项并且不会加载数据如何克服这种情况。任何帮助赞赏
答案 0 :(得分:1)
现在问题是如果没有互联网连接的话 共享首选项将被执行,数据将不会加载如何 我可以克服这种情况。
而不是在dialogShown
为false
时更新值,而是在网络连接可用时更新SharedPreferences
中的值,否则将其设为false:
if (haveNetworkConnection()) {
new xyz().execute();
// update value in SharedPreferences for dialogShown to true
} else {
// update value in SharedPreferences for dialogShown to false
}
或者使用onPostExecute
类的xyz
方法在所有操作成功时更新标志值
答案 1 :(得分:0)
您可以先检查网络连接。
if (haveConnection()){
if(!dialogShown){
new xyz().execute
dialogShown = true;
}else
//already done
}
}
上面的代码应首先检查连接,然后检查dialogShown变量是否为false。这种方法的结果是不断ping连接以检查它是否存在。根据您使用封闭方法的方式,这可能会导致设计决策审核。您总是可以使用onPostExecution()。