Asynctask onPreExecute和doInBackground未调用

时间:2015-03-01 16:30:47

标签: 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(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){

            }
        }
    }
}

我尝试使用executeOnExecutor()代替execute(),但这也无效。

然后我切换回原来的代码,令我惊讶的是现在我的Galaxy平板电脑上也没有onPreExecute()doInBackground()。有什么想法吗?

0 个答案:

没有答案