我在三星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()
。有什么想法吗?