Android 未调用Asynctask onPreExecute和doInBackground
我在三星Galaxy Tab 3 Lite(Android 4.2.2)上测试了下面的代码,效果很好。然而,当我在三星Galaxy S4(Android 4.4.2)上测试它时,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(
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。