执行一段代码

时间:2016-01-11 06:13:40

标签: android sharedpreferences

我目前正在开发一个应用程序,它需要从服务器获取数据并存储在我的本地数据库中。为了确保这段代码只运行一次我正在执行以下操作。

      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();
        }

上面我正在设置共享首选项,以便它只执行一次。现在问题是,如果没有互联网连接,将执行共享首选项并且不会加载数据如何克服这种情况。任何帮助赞赏

2 个答案:

答案 0 :(得分:1)

  

现在问题是如果没有互联网连接的话   共享首选项将被执行,数据将不会加载如何   我可以克服这种情况。

而不是在dialogShownfalse时更新值,而是在网络连接可用时更新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()。