2013-06-25 114 views
0

我有一个应用程序,每当用户启动应用程序时,它会在数据库中创建一个新条目。此外,应该有一个功能,可以在用户退出时删除用户的注册表。对于这2个函数,我有2个asynctasks。第一个工作正常,从而在数据库中创建用户。但是,尽管没有错误,但应该删除用户的asynctask在调用onDestroy()时不会执行任何操作。我用onPause()进行了测试,应用程序删除了用户,但我不知道为什么onDestroy()不工作。 下面是相关的代码,我使用:Android:调用onDestroy时Asynctask不工作

public class Titulacion extends Activity { 

    @Override 
public void onDestroy(){ 
super.onDestroy(); 
new Borrar().execute(); 
// UIHelper.killApp(true); 
    } 

    public static int titulacion; 
    Button bAceptar; 
    RadioGroup radGrp; 
    RadioButton radBot1; 
    RadioButton radBot2; 
    RadioButton radBot3; 
    RadioButton radBot4; 
    ImageButton bAdmin; 
    static int nTest = 0; 
    private ProgressDialog pDialog; 
    private static final String TAG_SUCCESS = "success"; 
    JSONParser jsonParser = new JSONParser(); 
    private static final int DIALOG_CONFIRMAR_USUARIO = 0; 
    int level = -1; 
    String levelstring; 
    int pid; 
    static String pids; 
    BroadcastReceiver batteryReceiver; 
    String url = "10.0.0.13"; 
    private static String url_crear = "http://10.0.0.13/subida/create_candidato.php"; 
    private static final String url_delete = "http://10.0.0.13/subida/delete_candidato.php"; 

    @SuppressLint("NewApi") 
    static String device_id = Build.SERIAL; 
    static String PDA = device_id.substring(device_id.length() - 6); 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.titulacion); 
     batteryReceiver = new BroadcastReceiver() { 
      int scale = -1; 
      int voltage = -1; 
      int temp = -1; 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); 
       levelstring = String.valueOf(level)+"%"; 
       scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1); 
       temp = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1); 
       voltage = intent.getIntExtra(BatteryManager.EXTRA_VOLTAGE, -1); 
      } 
     }; 
     IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); 
     registerReceiver(batteryReceiver, filter); 




     radGrp = (RadioGroup) findViewById(R.id.titGroup); 
     radBot1 = (RadioButton) findViewById(R.id.bot_superior); 
     radBot2 = (RadioButton) findViewById(R.id.bot_medio); 
     radBot3 = (RadioButton) findViewById(R.id.bot_tecnico); 
     radBot4 = (RadioButton) findViewById(R.id.bot_administrativo); 
     bAdmin = (ImageButton) findViewById(R.id.administradorinit); 
     bAceptar = (Button) findViewById(R.id.BtnAceptar); 
     StrictMode.ThreadPolicy policy = new StrictMode. ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); 

     boolean isReachable = false; 
     try{ 
      isReachable = InetAddress.getByName("10.0.0.13").isReachable(1000); 
     } catch (Exception e){ 
      Log.e("InetAddress", e.getMessage()); 




     }finally { 
      if (isReachable) { 
       new CreateCandidato().execute(); 


      }else{ 
       Toast.makeText(getApplicationContext(), R.string.errorserver, Toast.LENGTH_LONG).show(); 
      } 

     } 


     bAceptar.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (radBot1.isChecked()) { 
        titulacion = 1; 
        Intent i = new Intent(Titulacion.this, Ident.class); 
        startActivity(i); 
        unregisterReceiver(batteryReceiver); 

       } else if (radBot2.isChecked()) { 
        titulacion = 2; 
        Intent i = new Intent(Titulacion.this, Ident.class); 
        startActivity(i); 
        unregisterReceiver(batteryReceiver); 

       } 

       else if (radBot3.isChecked()) { 

        titulacion = 3; 
        Intent i = new Intent(Titulacion.this, MenuInterna.class); 
        startActivity(i); 
        unregisterReceiver(batteryReceiver); 

       } 

       else if (radBot4.isChecked()) { 
        titulacion = 4; 
        Intent i = new Intent(Titulacion.this, MenuSup.class); 
        startActivity(i); 
        unregisterReceiver(batteryReceiver); 

       } 
      } 
     }); 
     bAdmin.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent i = new Intent(Titulacion.this, Admin.class); 
       startActivity(i); 
       unregisterReceiver(batteryReceiver); 

      } 
     }); 
    } 
    class CreateCandidato extends AsyncTask<String, String, String> { 


     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(Titulacion.this); 
      pDialog.setMessage("Actualizando .."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(true); 
      pDialog.show(); 
     } 


     protected String doInBackground(String... args) { 

      try { 
      List<NameValuePair> params = new ArrayList<NameValuePair>(); 
      params.add(new BasicNameValuePair("nserie", PDA)); 
      params.add(new BasicNameValuePair("bateria", levelstring)); 


      JSONObject json = jsonParser.makeHttpRequest(url_crear, 
        "POST", params); 

      Log.d("Create Response", json.toString()); 



       pid = json.getInt("id"); 
       pids = String.valueOf(pid); 


       int success = json.getInt(TAG_SUCCESS); 


      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

      return null; 
     } 

     protected void onPostExecute(String file_url) { 
      // dismiss the dialog once done 
      pDialog.dismiss(); 


     } 

    } 
    class Borrar extends AsyncTask<String, String, String> { 


     @Override 
     protected void onPreExecute() { 

     super.onPreExecute(); 
     Log.d("LLEGA1", "LLEGA1"); 

    } 


     protected String doInBackground(String... args) { 

      // Check for success tag 
      int success; 
      try { 

      } catch (Exception e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 
      try { 


       List<NameValuePair> params = new ArrayList<NameValuePair>(); 
       params.add(new BasicNameValuePair("id", Titulacion.getPID())); 


       JSONObject json = jsonParser.makeHttpRequest(
         url_delete, "POST", params); 


       Log.d("Delete Product", json.toString()); 

       success = json.getInt("success"); 

      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

      return null; 
     } 


     protected void onPostExecute(String file_url) { 
      Log.d("llega", "LLEGA"); 



     } 

    } 

谢谢您的帮助

+0

该活动的呼叫,如果我的回答是帮到u不要忘记去接受它 –

回答

1

你的活动被破坏,但被的AsyncTask做的工作(在后台工作)。不会有任何ANR,因为你没有在UI上做任何背景材料。如果在AsyncTask完成后更新UI上的任何视图,则会出现NULLPOINTERException。但是,在onDestroy()中运行AsyncTask并不是一个好主意。在onDestroy()

使用asyntask相反,你可以拥有一个扩展IntentService的活动,让来自的onDestroy

+0

好,谢谢迪克西特帕特尔,我会努力以调查IntentService中的更多内容 – Katherine99