Android 未调用Asynctask onPreExecute和doInBackground

Android 未调用Asynctask onPreExecute和doInBackground,android,android-asynctask,Android,Android Asynctask,我在三星Galaxy Tab 3 Lite(Android 4.2.2)上测试了下面的代码,效果很好。然而,当我在三星Galaxy S4(Android 4.4.2)上测试它时,doInBackground()由于某种原因没有被调用 public class MainActivity extends ActionBarActivity implements OnClickListener { DataBaseHelper myDbHelper = new DataBaseHelper(

我在三星Galaxy Tab 3 Lite(Android 4.2.2)上测试了下面的代码,效果很好。然而,当我在三星Galaxy S4(Android 4.4.2)上测试它时,
doInBackground()
由于某种原因没有被调用

public class MainActivity extends ActionBarActivity implements OnClickListener {

    DataBaseHelper myDbHelper = new DataBaseHelper(this);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
        try {
            myDbHelper.createDataBase();
        } catch (IOException ioe) {

        }

        try {
            myDbHelper.openDataBase();
        } catch (SQLException sqle) {
            throw sqle;
        }

        ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo ni = cm.getActiveNetworkInfo();
        if (ni == null) {
            new NoInternet().execute("");
        } else {
            new CheckOpen().execute("");
        }
    }

    private class CheckOpen extends AsyncTask<String, Void, String> {
        ProgressDialog progressDialog;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
            String locale = Locale.getDefault().getLanguage();
            if (locale.equals("el")) {
                progressDialog = ProgressDialog.show(MainActivity.this, "Παρακαλώ Περιμένετε", "Υπολογισμός Αποστάσεων\nΈλεγχος Ωρών Λειτουργίας");
            } else {
                progressDialog = ProgressDialog.show(MainActivity.this, "Please Wait", "Calculating distances\nChecking opening hours");
            }
        }

        @Override
        protected String doInBackground(String... params) {

            LocationManager locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
            boolean network_enabled = locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
            Location location;

            if (network_enabled) {

                location = locManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                if (location != null) {
                    double lon = location.getLongitude();
                    double lat = location.getLatitude();

                    String distance1 = myDbHelper.GetRouteDistance(lat, lon, 37.968454, 23.728512);
                    distance1 = distance1.replaceAll("[^0-9.,]+", "");
                    distance1 = distance1.replace(",", ".");
                    try {
                        float dist1 = Float.parseFloat(distance1);
                        myDbHelper.updateDist1(dist1);
                    } catch (NumberFormatException e) {
                        myDbHelper.updateDist1(0);
                    }
                    String distance2 = myDbHelper.GetRouteDistance(lat, lon, 37.989019, 23.732771);
                    distance2 = distance2.replaceAll("[^0-9.,]+", "");
                    distance2 = distance2.replace(",", ".");
                    try {
                        float dist2 = Float.parseFloat(distance2);
                        myDbHelper.updateDist2(dist2);
                    } catch (NumberFormatException e) {
                        myDbHelper.updateDist2(0);
                    }
                }
                return "Checked";
            }

            @Override
            protected void onPostExecute (String result) {
                myDbHelper.update1();
                myDbHelper.update2();
                if (progressDialog != null) {
                    if (progressDialog.isShowing()) {
                        progressDialog.dismiss();
                        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
                    }
                }
            }


            @Override
            protected void onProgressUpdate (Void...values){

            }
        }
    }
}
公共类MainActivity扩展了ActionBarActivity实现OnClickListener{
DataBaseHelper myDbHelper=新的DataBaseHelper(此);
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u NOSENSOR);
试一试{
myDbHelper.createDataBase();
}捕获(ioe异常ioe){
}
试一试{
myDbHelper.openDataBase();
}捕获(SQLException sqle){
抛出sqle;
}
ConnectivityManager cm=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_服务);
NetworkInfo ni=cm.getActiveNetworkInfo();
如果(ni==null){
新建NoInternet()。执行(“”);
}否则{
新建CheckOpen()。执行(“”);
}
}
私有类CheckOpen扩展异步任务{
进行对话进行对话;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u NOSENSOR);
字符串locale=locale.getDefault().getLanguage();
if(locale.equals(“el”)){
progressDialog=progressDialog.show(main activity.this,“παρακαλώ∏ερμένετεεε”,“ππλλλολογισμόπ∑τεεωωεε∧εχγ∧ετττρ;
}否则{
progressDialog=progressDialog.show(MainActivity.this,“请稍候”,“计算距离\n检查开放时间”);
}
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
LocationManager LocationManager=(LocationManager)getSystemService(Context.LOCATION\u服务);
布尔值network\u enabled=locManager.isProviderEnabled(LocationManager.network\u PROVIDER);
位置;
如果(网络已启用){
location=LocationManager.getLastKnownLocation(LocationManager.NETWORK\u提供程序);
如果(位置!=null){
double lon=location.getLongitude();
双纬度=location.getLatitude();
字符串距离1=myDbHelper.GetRouteDistance(lat,lon,37.968454,23.728512);
距离1=距离1.replaceAll([^0-9.,]+,”);
距离1=距离1。替换(“,”,“);
试一试{
float dist1=float.parseFloat(distance1);
myDbHelper.updateDist1(dist1);
}捕获(数字格式){
myDbHelper.updateSt1(0);
}
字符串距离2=myDbHelper.GetRouteDistance(lat,lon,37.989019,23.732771);
距离2=距离2.replaceAll([^0-9.,]+,”);
距离2=距离2.替换(“,”,“);
试一试{
float dist2=float.parseFloat(distance2);
myDbHelper.updateDist2(dist2);
}捕获(数字格式){
myDbHelper.updateSt2(0);
}
}
返回“已检查”;
}
@凌驾
受保护的void onPostExecute(字符串结果){
myDbHelper.update1();
myDbHelper.update2();
如果(progressDialog!=null){
if(progressDialog.isShowing()){
progressDialog.disclose();
setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u未指定);
}
}
}
@凌驾
受保护的void onProgressUpdate(void…值){
}
}
}
}
我尝试使用
executeOnExecutor()
而不是
execute()
,但也不起作用


然后我又回到了我原来的代码,令我惊讶的是,我的Galaxy平板电脑上也没有调用
onPreExecute()
doInBackground()
。有什么想法吗?

如果(ni==null)看到结果,您是否尝试记录此语句的结果?顺便说一下:此代码将导致内存泄漏。您永远不应该嵌套这样的
AsyncTask
。@IvanWooll我记录了它,if语句工作得很好。此外,框架提供了比检查当前区域设置更好的国际化方法
strings.xml
旨在解决这个问题。@Emmanuel我有不同的本地化文件夹,但我想我不能在show()中使用strings.xml。