2013-06-25 36 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